我最近阅读了这篇文章,并尝试通过执行以下操作来覆盖 libc printf 函数:-
- 创建一个使用 printf 打印的可执行文件
this is a test
(printer.c) - 创建一个带有自定义放置打印的 c 文件
muhahaha, this is a test
(custom.c) - 创建目标文件
gcc -fPIC -g -c -Wall custom.c
- 创建so文件
gcc -shared -Wl,-soname,libmystuff.so.1 -o libmystuff.so.1.0.1 custom.o
- 我将包含 so 文件的目录添加到 LD_PRELOAD 环境变量中。
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");
}