我读了this article recently,我尝试重写libc printf函数并执行以下操作: -
this is a test
(printer.c)muhahaha, this is a test
(custom.c)gcc -fPIC -g -c -Wall custom.c
gcc -shared -Wl,-soname,libmystuff.so.1 -o libmystuff.so.1.0.1 custom.o
export LD_PRELOAD=$(pwd)
我认为muhahaha, this is a test
会打印出来,但似乎我做错了。我有一些概念错了吗?或者我只是做错了什么?
[编辑]
所涉及的代码片段是: -
// printer.c
int main() {
printf("this is a test");
return 0;
}
// custom.c
void printf(char *t) {
puts("muhahaha, this is a test");
}
答案 0 :(得分:1)
您应该在LD_PRELOAD环境变量中命名库,而不是目录。
export LD_PRELOAD=/path/to/libmystuff.so.1.0.1