1

CFF Explorer能够从 PE 文件中检测 VC 编译器版本。它为我的 exe 文件显示“Microsoft Visual C++ 8”,该文件静态链接到 libCMT(无 dll 依赖项)。

这是怎么做的?它必须回复我不知道的 PE 文件中的某些结构。

更新:

  1. CFF Explorer 可以为静态链接的 PE 文件获取正确的 VC 编译器版本(不依赖于 msvcmXX.dll、msvcpXX.dll 或 msvcrXX.dll)
  2. 即使我将PE可选标头中的LinkerVersion / ImageVersion / SubsytstemVersion / OperratingSystemVersion字段清零,CFF资源管理器仍然可以知道正确的VC编译器版本。

似乎 CFF 资源管理器正在使用一种非常可靠的方法来检测 VC 编译器版本。

4

1 回答 1

2

PE Header 有一些关于链接器(或编译器)的信息。查看:

http://wiki.osdev.org/PE

并且:

http://mirror.sweon.net/madchat/vxdevl/papers/winsys/pefile/pefile.htm

PE 标头中的魔术词可能是您答案的关键。

编辑

似乎 CFF 资源管理器依赖于代码签名。我在这里发现了一些有趣的帖子:

确定哪个编译器构建了 Win32 PE

在RBerteig 的回复中,内部符号可以用来确定编译器。

http://www.codeproject.com/Articles/24417/Portable-Executable-PE-Code-Injection-Injecting-a

从这篇文章中,_main 地址是确定它的签名之一。

和这篇文章: http: //ntcore.com/files/richsign.htm

提供有关 Microsoft 编译器签名的更多线索。

于 2012-12-21T03:45:42.773 回答