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

时间:2017-01-20 18:13:55

标签: c++ windows executable msys2 cl

鉴于来自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实用程序可以理解它:

$ 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获得的东西也可能很有趣。

1 个答案:

答案 0 :(得分:2)

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

dumpbin /HEADERS cl.exe | findstr "machine"

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

            8664 machine (x64)

或以下是32位图像

             14C machine (x86)
                   32 bit word machine