我正在尝试使用ld的-wrap选项拦截对printf的调用.我有两个文件:
main.c中:
#include <stdio.h>
int main(void) {
printf("printing\n");
printf("printing");
}
printf_wrapper.c:
int __real_printf(const char *format, ...);
int __wrap_printf(const char *format, ...) {
(void)format;
return __real_printf("WRAPPED\n");
}
我用以下命令编译:
gcc -Wl,-wrap,printf *.c
当我运行生成的a.out二进制文件时,我得到这个输出:
printing
WRAPPED
如果字符串中有换行符,为什么换行会失败?我检查了系统的stdio.h,printf不是宏.这是使用gcc 5.3.0
最佳答案 使用-fno-builtin选项告诉gcc不要乱用某些指定的函数.所以,如果你添加-fno-builtin-printf它应该工作.通常,它可能会导致编译器错过的一些问题.有关详细信息,请参阅gcc文档,例如
https://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/C-Dialect-Options.html