你能找出用于编译程序的编译器吗?

时间:2009-03-06 11:17:36

标签: compiler-construction identification

鉴于从C编译以在Solaris上运行的可执行文件,是否可以确定使用哪个编译器来编译关联的不完整可执行文件?

使用字符串或文件命令时,我看不到任何内容,而魔法似乎没有包含任何特定内容。

编译器通常会在可执行输出文件中添加指纹吗?

欢呼声,

7 个答案:

答案 0 :(得分:6)

是的,IDA非常适合这一点。它使用了一种名为FLIRT的技术。

答案 1 :(得分:4)

PEID会做到这一点。它通常很有效。显然PEID是一个Windows工具,但它应该没关系,应该向编译器显示(有时甚至是特定的版本信息)

答案 2 :(得分:2)

使用您尝试识别的每个编译器构建小型测试应用程序。然后在十六进制编辑器中查看结果,并尝试查找模式。它可能会变得非常明显 - 例如来自Microsoft链接器的"Rich" signatures

答案 3 :(得分:2)

如果未剥离可执行文件,请尝试/ usr / ccs / bin mcs -p 这通常会显示编译器,链接器和使用的所有头文件

答案 4 :(得分:1)

未剥离:

$ cc -O hello.c

$ file a.out

a.out:ELF 32位MSB可执行文件SPARC32PLUS版本1,V8 +必需,动态链接,未剥离

$ strings -a a.out | grep cc

/opt/solarisstudio12.3/prod/bin/cc -O hello.c

$ dwarfdump -i a.out | grep compile_o

DW_AT_SUN_compile_options Xa; O; R = Sun C 5.12 SunOS_sparc Patch 148917-07 2013/10/18; backend; raw; cd;

剥去:

$ strip a.out

$ file a.out

a.out:ELF 32位MSB可执行文件SPARC32PLUS版本1,V8 +必需,动态链接,剥离

$ strings -a a.out | grep cc

(无)

答案 5 :(得分:0)

Visual Studio和GCC通常遵循不同的启动例程(调用main)。这可能是一个暗示。我不知道其他人。对于dll来说,无法想到类似的东西。

答案 6 :(得分:0)

编译器通常在编译文件中将自己的个人“签名”添加为纯文本。您可以使用诸如字符串之类的工具来输出明文。