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

3

如果给定两个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

如果我安装msys2file实用程序可以对其进行某种程度的理解:
$ 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获得,这也可能很有趣。


2
微软工具是 dumpbin - Ben Voigt
跨站点重复:http://superuser.com/q/358434/29943 - Ben Voigt
1个回答

3

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

dumpbin /HEADERS cl.exe | findstr "machine"

这将针对64位图像产生以下输出。
            8664 machine (x64)

对于32位图像,请使用以下内容。
             14C machine (x86)
                   32 bit word machine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接