kri*_*isy 3 c++ unix shared-libraries ld
我正在尝试使用LD_PRELOAD.
original.cpp
void myPuts() {
puts ("Hello myPuts");
}
int main() {
myPuts();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
hacked.cpp
void myPuts() {
std::cout >> "Hello hacked myPuts";
}
Run Code Online (Sandbox Code Playgroud)
我编译original.cpp:
g++ original.cpp
Run Code Online (Sandbox Code Playgroud)
和hacked.cpp:
g++ -shared -fPIC hacked.cpp
Run Code Online (Sandbox Code Playgroud)
我尝试:
LD_PRELOAD=./hacked.so ./original.out
Run Code Online (Sandbox Code Playgroud)
应该看到字符串"Hello hacked myPuts",出现"Hello myPuts".(如果我尝试"覆盖"puts函数,它可以正常工作)
我错过了什么?
来自男人ld.so
LD_PRELOAD
一个以空格分隔的列表,其中包含要在所有其他库之前加载的其他用户指定的ELF共享库.这可用于有选择地覆盖其他共享库中的函数.
如果myPuts位于链接到主应用程序的共享库中,那么它将起作用,但是当myPuts存在于应用程序中并且未在外部库中解析时.