プリロードしたライブラリから実行可能ファイルを呼び出せるようにしたいと考えています。これをする -
私は単純な実行可能ファイルを持っています
main.c
#include <stdio.h>
void callme()
{
printf("callme\n");
}
int main(int argc, char *argv[])
{
callme();
return 0;
};
これはでコンパイルされます
gcc -m32 main.c
callme
前に呼び出されるように、ライブラリをプリロードしたいと思いmain
ます。
preload.c
extern void callme();
void preload_init() __attribute__((constructor));
void preload_fini() __attribute__((destructor));
void preload_init()
{
callme();
}
void preload_fini()
{
callme();
}
これはでコンパイルされます
gcc -D_GNU_SOURCE -shared -o libpreload.so preload.c -fPIC -m32 -ldl
だから今私は持っていa.out
ますlibpreload.so
これを実行しようとすると
LD_PRELOAD=./libpreload.so ./a.out
./a.out: symbol lookup error: ./libpreload.so: undefined symbol: callme
これをデバッグするために私は試しました
LD_DEBUG=symbols LD_PRELOAD=./libpreload.so ./a.out
これからの出力には、この行が含まれます
13184: symbol=callme; lookup in file=./a.out [0]
したがって、callme シンボルの正しい場所を探しているように見えます。
からの出力nm a.out
には次の行が含まれます
080483b4 T callme
callme を a.out の外部からアクセスできるようにコンパイルする必要がありますか?
どんな助けでも大歓迎です。