LD_PRELOAD加载了事件

时间:2012-05-02 17:32:21

标签: linux

我写了我的LD_PRELOAD模块,我想在覆盖的函数工作之前添加一些初始化代码。也许LD_PRELOAD有任何加载的事件或类似的东西?

谢谢!

1 个答案:

答案 0 :(得分: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!

constructor属性表示该函数应在main()之前执行。或者,如果您正在使用C ++,则可以创建一个类的静态全局实例,其构造函数执行初始化,这将获得与使用constructor相同的效果。