CライブラリのC関数への呼び出しをオーバーライドするために、この回答に従っています。
私はすべて正しくやったと思いますが、うまくいきません:
「DibOpen」関数をオーバーライドしたい。これは、アプリケーションの実行時に LD_PRELOAD 環境変数に渡すライブラリのコードです。
DIBSTATUS DibOpen(void **ctx, enum Board b)
{
printf("look at me, I wrapped\n");
static DIBSTATUS (*func)(void **, enum Board) = NULL;
if(!func)
func = dlsym(RTLD_NEXT, "DibOpen");
printf("Overridden!\n");
return func(pContextAddr, BoardType, BoardHdl);
}
nm lib.so | grep DibOpen
ショーの出力
000000000001d711 T DibOpen
このようにプログラムを実行すると
LD_PRELOAD=libPreload.so ./program
program
-ldl でリンクしていますが、libdl.soldd program
へのリンクが表示されません
で止まります
symbol lookup error: libPreload.so: undefined symbol: dlsym
. これをさらにデバッグするにはどうすればよいですか? 私の間違いはどこですか?