有没有办法检查用于构建给定 .exe 的 Visual C++ 版本?
我知道如果 .exe 使用带有 CRT 的动态链接很容易:我可以使用 Dependency Walker 并读取 MSVCRxx.DLL 版本,例如对 MSVCR90.DLL 的依赖意味着 .exe 是用 Visual C++ 2008 即 VC9 构建的; 但是使用 CRT 进行静态链接的情况呢?
有没有办法检查用于构建给定 .exe 的 Visual C++ 版本?
我知道如果 .exe 使用带有 CRT 的动态链接很容易:我可以使用 Dependency Walker 并读取 MSVCRxx.DLL 版本,例如对 MSVCR90.DLL 的依赖意味着 .exe 是用 Visual C++ 2008 即 VC9 构建的; 但是使用 CRT 进行静态链接的情况呢?
是否可以检查 Depends.exe 中的链接器版本,与 VisualC++ 版本几乎相同。
在 Dependency Walker 的下部视图中,选择列Linker Ver。
我在 MSDN 上发现了 Matt Pietrek 的这篇有趣的文章:
Windows 内部:深入了解 Win32 可移植可执行文件格式
感兴趣的领域是IMAGE_OPTIONAL_HEADER32/64::MajorLinkerVersion
和MinorLinkerVersion
。它们几乎与 Visual C++ 版本相同(例如 VC10 的“10”和“0”)。
(我认为这些是 Dependency Walker在其用户界面中用于Linker Ver列的字段。)