3

我已经下载了glibc,以便我可以修改它的代码然后使用它。所以只是为了玩它,我更改了glibcstdio-common目录中的printf函数,以便它打印“你能看到我吗?”。

int
__printf (const char *format, ...)
{
  va_list arg;
  int done;

  va_start (arg, format);
  done = vfprintf (stdout, "Can you see me?", arg);
  va_end (arg);

  return done;
}

进行该更改后,我编译了glibc,然后在此glibc目录中使用 LD_PRELOAD 和libc.so来使用printf运行示例程序。但是我还是看到printf打印正常,就是我做的改动没有体现出来。我在这里犯了什么错误?

4

1 回答 1

1

这可能有几个原因,最简单的是你使用了一个没有真正格式的字符串,编译器将调用从 更改printfputs

printf("hello\n");
// becomes:
puts("hello");

尝试添加一个参数:

char ex = '!';
printf("Hello %c\n", ex);
于 2012-05-02T17:25:43.170 回答