gcc wrap选项会对函数printf产生影响吗?

时间:2016-08-28 07:43:34

标签: c gcc ld

我写了一个wrap函数来替换printf的{​​{1}}。我发现stdio.h选项适用于wrap中的函数,例如stdlib.hmalloc。但它不适用于exitprintf

选项fprintf是否会对wrap中的功能产生影响?我怎么能包装一个任意函数?我无法从ld document获得有用的指南。

以下是代码:

stdio.h

2 个答案:

答案 0 :(得分:6)

如果您希望这对-fno-builtin-fprintf正常工作,您还需要将标志fprintf添加到命令行。不过,gcc会优化对fwrite的调用,而不是调用fprintf,链接器也不会看到对-fno-builtin-的调用。

通常,要正确包装任何函数,您可能还需要相应的{{1}}选项。

答案 1 :(得分:2)

没有参数的

fprintf(格式字符串除外)优化为fwrite。将您的fprintf电话更改为fprintf(stderr, "%s\n", "MAIN!");,包装将生效。

int __real_fprintf(FILE *stream, const char *format, ...);

int main(){
    fprintf(stderr, "%s\n", "MAIN!"); 
    return 0;
}

int __wrap_fprintf(FILE *stream, const char *format, ...){
    __real_fprintf(stderr, "WRAP!\n");
    return 0;
}