1
我想知道这是如何工作的,创建一个库并预加载它,以便程序可以使用它而不是include语句中的一个。我怎样才能LD_PRELOAD我自己编译的库?
这是我正在做的,到目前为止还没有工作。
//shared.cpp
int rand(){
return 33;
}
//prograndom.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(NULL));
int i = 10;
while(i--) printf("%d\n", rand()%100);
return 0;
}
然后在终端:
$ gcc -shared -fPIC shared.cpp -o libshared.so
$ gcc prograndom.cpp -o prograndom
$ export LD_PRELOAD=/home/bob/desarrollo/libshared.so
最后
$ LD_PRELOAD=/home/bob/desarrollo/libshared.so ./prograndom
其犯规打印33,只是随机数...
非常感谢,它的工作! – HoNgOuRu
如果我想在C++中做这个,我应该做些什么改变? – HoNgOuRu
@HoNgOuRu:你必须声明你想用作'extern“C''的'rand',以匹配你试图覆盖的'rand'。但是如果你尝试使用编译为C的'main'的PRELOAD,那么你可能会遇到问题。 – rici