0

我最近阅读了这篇文章,并尝试通过执行以下操作来覆盖 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");
}
4

1 回答 1

1

您应该在 LD_PRELOAD 环境变量中命名库,而不是目录。

export LD_PRELOAD=/path/to/libmystuff.so.1.0.1
于 2012-04-28T01:32:58.293 回答