【发布时间】:2021-07-12 07:33:23
【问题描述】:
如果我只有二进制可执行文件,我怎么知道它是用什么链接器构建的?
【问题讨论】:
-
为什么需要知道?通常你不能说出来。
-
嗯,我认为这在不同的情况下可能会有用。在我的例子中,我是从一台我认为我之前设置 LLD 链接器以用于所有项目的机器上构建的,但是缓慢的构建时间让我怀疑(即使 LLD 比默认链接器,它仍然是isn't very fast,所以我不能仅仅通过构建速度来判断)。显然,就我而言,我可以在构建机器上检查它,但我认为如果有办法以某种方式检查二进制文件本身会很好。
-
仅从链接器所做的工作来看,如果它不插入一些识别内容,我不知道如何区分链接器。 (假设使用了相同的链接器脚本。)二进制文件主要(如果不完全)是对象模块的串联,所有引用都已解析。但我不是 ELF 专家。
-
在 linux 可执行文件中有这部分
.comment可能有用:objdump -j .comment -s program。 -
看到这个github.com/rust-lang/rust/issues/39915,似乎还没有完全支持LLD。