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 回答