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

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

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

欢呼声,

有帮助吗?

解决方案

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

其他提示

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

PEID 可以解决问题。它通常很有效。显然PEID是一个Windows工具,但它应该没关系,应该向编译器显示(有时甚至是特定的版本信息)

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

未剥离:

$ 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

(无)

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top