LD_PRELOAD モジュールを作成しましたが、オーバーライドされた関数が機能する前に初期化コードを追加したいと考えています。LD_PRELOAD にはロードされたイベントなどがありますか?
ありがとう!
LD_PRELOAD モジュールを作成しましたが、オーバーライドされた関数が機能する前に初期化コードを追加したいと考えています。LD_PRELOAD にはロードされたイベントなどがありますか?
ありがとう!
「ロードされた」イベントについてgcc
はわかりませんが、 を使用している場合は、このconstructor
属性が役立つ場合があります。たとえば、次のとおりです。
testlib.c : #include
void testing(void) __attribute__((constructor));
void testing(void)
{
printf("It worked!\n");
}
hworld.c :
#include <stdio.h>
int main(void)
{
printf("Hello world!\n");
return 0;
}
$ gcc -o hworld hworld.c
$ gcc -shared -fPIC -o testlib.so testlib.c
$ export LD_PRELOAD=./testlib.so
$ ./hworld
It worked!
Hello world!
コンストラクター属性は、関数を の前に実行する必要があることを意味しますmain()
。あるいは、C++ を使用している場合は、コンストラクターが初期化を行うクラスの静的グローバル インスタンスを作成できます。これにより、constructor
.