我写了我的 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
.