我写了我的LD_PRELOAD模块,我想在覆盖的函数工作之前添加一些初始化代码。也许LD_PRELOAD有任何加载的事件或类似的东西?
谢谢!
答案 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
相同的效果。