如何确定哪个编译器已用于编译可执行文件?

时间:2010-12-29 13:30:39

标签: c++ c compiler-construction

从编译文件中,我可以看到哪个编译器已用于生成文件吗?

4 个答案:

答案 0 :(得分:8)

还有一个很好的旧'字符串'实用程序。转储所有ascii-ish查找它在二进制文件中找到的字符串。不同的编译器在它们生成的二进制文件中嵌入了不同数量的信息,但实际上很多都会包含明显的字符串。

答案 1 :(得分:5)

许多编译器/链接器在输出文件中插入一个.comment部分来标识它们。还有一些更微妙的行为可以创建编译器指纹,但我知道没有现有的工具。

如果您有源代码,最简单的解决方案是尝试使用相关的每个编译器进行编译,直到得到一个匹配逐字节(甚至密切)的二进制文件。

答案 2 :(得分:4)

在某些情况下,您可以在二进制文件上运行ldd并找出它链接的标准库。例如,在Solaris gcc vs Sun CC vs之间。

对于C ++代码,您还可以转储一些符号,查找损坏的函数名称,然后找出哪个demangler生成正确的原始名称。

答案 3 :(得分:2)

尝试,IDA Pro标识用于构建可执行文件的库和工具。