1

プリロードしたライブラリから実行可能ファイルを呼び出せるようにしたいと考えています。これをする -

私は単純な実行可能ファイルを持っています

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 の外部からアクセスできるようにコンパイルする必要がありますか?

どんな助けでも大歓迎です。

4

1 に答える 1