鉴于从C编译以在Solaris上运行的可执行文件,是否可以确定使用哪个编译器来编译关联的不完整可执行文件?
使用字符串或文件命令时,我看不到任何内容,而魔法似乎没有包含任何特定内容。
编译器通常会在可执行输出文件中添加指纹吗?
欢呼声,
答案 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)
编译器通常在编译文件中将自己的个人“签名”添加为纯文本。您可以使用诸如字符串之类的工具来输出明文。