1

LD_PRELOAD モジュールを作成しましたが、オーバーライドされた関数が機能する前に初期化コードを追加したいと考えています。LD_PRELOAD にはロードされたイベントなどがありますか?

ありがとう!

4

1 に答える 1

3

「ロードされた」イベントについて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.

于 2012-05-02T17:50:06.287 に答える