【发布时间】:2015-11-22 16:31:06
【问题描述】:
当我objdump我的a.out时,我发现__IO_putc被使用了。
我知道当printf 的输入很简单时,gcc 会使用putc 替换printf。但是为什么 gcc 将我的 putc 替换为 __IO_putc 呢?我可以使用-U_FORTYFY(禁用__printf_chk)或--fno-stack-protector(禁用__stack_chk_fail)之类的命令行来防止这种替换吗?
【问题讨论】:
-
有什么理由不想在二进制文件中使用这些符号?
-
__IO_putc 是一个 glibc 内部函数,但是当我想做交叉编译或二进制翻译之类的事情时,这个函数会很麻烦。
-
您是在问如何防止“将
printf替换为putc”? -
请详细解释为什么您不希望在答案中使用它。
-
@hwliu 您的二进制文件无论如何都依赖于 glibc 的 ABI,您生成的代码嵌入了大量特定于 glibc 的结构和类型,因此只关心特定的 glibc 符号可能对你帮助不大