区分由cl.exe生成的64位PE对象文件(Visual Studio C ++)

给定两个来自cl.exe PE对象文件,一个32位和一个64位,我怎么能告诉另一个没有诉诸Unix工具,最好在命令行(cmd.exe或powershell)?

 C:\> "...\VC\bin\cl.exe" -c test.c -Fotest32.obj C:\> "...\VC\bin\x86_amd64\cl.exe" -c test.c -Fotest64.obj 

如果我安装msys2 file实用程序可以sorting有意义的:

 $ file test*.obj test32.obj: Intel 80386 COFF object file, not stripped, 3 sections, [...] test64.obj: data 

file --version是5.28,但更新的5.25没有更好的。 msys2不提供objdump.exe ,但是当复制到Linux时,它可以正确分辨这两个文件:

 $ objdump -a test64.obj test64.obj: file format pe-x86-64 $ objdump -a test32.obj test32.obj: file format pe-i386 

一些比file更好的东西可以通过msys2的pacman获得,这也许是有趣的。

最直接的方法是使用Microsoft的DUMPBIN工具,传递/ HEADERS选项,例如

 dumpbin /HEADERS cl.exe | findstr "machine" 

这会为64位图像生成以下输出

  8664 machine (x64) 

或以下为32位图像

  14C machine (x86) 32 bit word machine