我想知道 gcc 链接器选项(例如:-Wl,options)是否可以更改编译后的可执行文件中的汇编指令,因为如果您使用某些 gcc 优化选项会发生这种情况?
当您比较编译后的二进制文件(例如比较签名)时,是否可以看出使用链接器选项和不使用它之间的区别?
更新
更准确地说,我想弄清楚是否 FLIRT当我在编译过程中使用某些链接选项时,签名会发生变化。这些签名仅使用库函数来创建签名。
最佳答案
对于某些链接器选项,可以在生成的二进制文件中看到更改,例如:
--strip-all
、 --strip-debug
、 --discard-all
)--as-needed
, --emit-relocs
) ld -o foo a.obj b.obj c.obj
和 ld -o foo a.obj c.obj b.obj
如果解析从 a 到 c 中的函数的调用,则可能会产生不同的二进制文件(c.obj 中代码的偏移量以及 c 中函数的地址可能会有所不同)但即使在链接之后,二进制文件的签名也可能会改变。例如在 Linux 中,当您通过运行 prelink 优化二进制启动时间时
关于gcc - gcc 链接器选项可以更改已编译二进制文件中的汇编器指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278508/