【发布时间】:2016-09-13 16:39:59
【问题描述】:
我想知道 gcc 链接器选项(例如:-Wl,options)是否可以更改已编译可执行文件中的汇编程序指令,因为如果您使用某些 gcc 优化选项会发生这种情况? 比较编译后的二进制文件(例如比较签名)时,是否可以看出使用链接器选项和不使用它的区别?
更新
更准确地说,我想弄清楚当我在编译过程中使用某些链接选项时FLIRT 签名是否会发生变化。这些签名仅使用库函数来创建签名。
【问题讨论】:
-
参见例如
--wrap. -
@Phillip 你能更准确地解释一下吗?
-
手册页有关于该选项的详细信息;它可以用来覆盖符号,至少对于 C 目标文件,它也可以改变函数的签名。
-
你的问题没有多大意义。链接器可以在不涉及链接器选项的情况下出于多种不同原因更改最终在可执行文件中的汇编指令,而 GCC 优化选项通常会对最终在可执行文件中的汇编指令进行大量更改。
-
你问的是什么改变了整个二进制文件的哈希值,还是只是实际的机器代码? (即,您是否排除了像节标题这样的目标文件元数据?)我很确定您在跳转和类似的东西中包含不同的 rel32 偏移量,所以排序很重要。如果您只关心不同的指令操作码,那只会发生在链接时优化中,其中代码生成在链接时完成/重新完成。
标签: gcc assembly optimization compilation linker