トップ 最新

かってきままな日々

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 から起動した端末や、端末から起動した各種プログラムが軒並み落ちる… 落ちないのも結構あるけど。

子プロセスが正常終了するのを前提としたプログラムも動かんな。

これで様子見!