かってきままな日々
2021-02-06 (Sa) [長年日記]
_ exit を hook してみた
waybar が落ちる。しょっちゅう落ちる。 なのに core 吐かない。 exit してるのか?
デバッグできない…
で、一念発起(?)
hook_exit.c
:
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
void exit(int code)
{
void *h = dlopen("libc.so.6", RTLD_LAZY);
void *fun = dlsym(h, "abort");
((void (*)(void))fun)();
}
単に、exit()
が呼ばれたら abort()
を呼ぶ、それだけ。
これを以下のようにコンパイル。
gcc -shared -fPIC hook_exit.c -o libhook_exit.so -ldl
そして LD_PRELOAD=/path/to/libhook_exit.so make
とか実行すると、
make が終了しようとした瞬間 make が core 吐いて落ちる。
ls や cat だと落ちないんだよね… _exit 使ってるんだろう… そういうプログラムには無力…
waybar はどうなんだろうね。
あと、waybar から起動した端末や、端末から起動した各種プログラムが軒並み落ちる… 落ちないのも結構あるけど。
子プロセスが正常終了するのを前提としたプログラムも動かんな。
これで様子見!