19

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

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

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

干杯,

4

7 回答 7

6

是的,IDA 非常适合这个。它使用一种称为FLIRT的技术。

于 2009-03-06T11:20:29.010 回答
4

PEID可以解决问题。它通常工作得很好。显然,PEID 是一个 Windows 工具,但它不重要,应该向编译器展示(有时甚至是特定的版本信息)

于 2009-03-06T11:29:59.097 回答
3

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

于 2011-01-11T00:53:19.780 回答
2

使用您尝试识别的每个编译器构建小型测试应用程序。然后在十六进制编辑器中查看结果,并尝试查找模式。结果可能非常明显——例如来自微软链接器的“Rich”签名。

于 2009-03-09T23:11:48.993 回答
1

未剥离:

$ cc -O hello.c

$文件a.out

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

$ 字符串-a a.out | grep 抄送

/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 补丁 148917-07 2013/10/18;backend;raw;cd;

剥离:

$ 剥离 a.out

$文件a.out

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

$ 字符串-a a.out | grep 抄送

(没有任何)

于 2014-03-05T19:44:24.917 回答
0

Visual Studio 和 GCC 通常遵循不同的启动例程(调用 main)。这也许是一个暗示。虽然我不知道其他人。对于 dll,我想不出类似的东西。

于 2009-03-06T11:24:54.287 回答
0

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

于 2009-03-09T23:14:49.330 回答