有没有一种简单的方法可以检查 Windows 上的二进制文件是 32 位还是 64 位?我需要在将程序移至 32 位机器并遇到严重故障之前进行检查。
答案1
检查标头值后理查德的回答,我想到了一个解决方案,它快速、简单,并且只需要一个文本编辑器。甚至 Windows 默认的 notepad.exe 也可以工作。
在文本编辑器中打开可执行文件。您可能需要拖放或使用编辑器的
Open...
对话框,因为 Windows 不会Open with...
在可执行文件的上下文菜单中显示选项。检查第一次出现 之后的第一个可打印字符
PE
。此部分很可能被至少一些空格包围(可能有很多),因此可以轻松地通过视觉完成。
以下是您将找到的内容:
32 位:
PE L
64 位:
PE d†
警告:使用默认记事本处理大文件可能会非常慢,因此最好不要将其用于大于一兆字节或几兆字节的文件。就我而言,显示 12 MiB 文件大约需要 30 秒。然而,Notepad++ 几乎可以立即显示 120 MiB 的可执行文件。
如果您需要检查无法安装任何其他软件的机器上的文件,此解决方案可能会有用。
附加信息:
如果您有可用的十六进制编辑器,则 PE 签名的偏移量位于偏移量处0x3C
。签名为PE\0\0
(字母“P”和“E”后跟两个空字节),后跟 Little Endian 中的两字节机器类型。
相关值0x8664
适用于 64 位可执行文件和0x014c
32 位可执行文件(64 86
分别4c 01
针对字节序进行了调整,但任何合适的十六进制编辑器都会在您搜索十六进制值时自动处理字节序)。还有更多可能的值,但您可能永远不会遇到其中任何一个,或者无法在 Windows PC 上运行此类可执行文件。
完整的机器类型列表以及其余的 .exe 规格可在以下位置找到:Microsoft PE 和 COFF 规范 机器类型部分。
答案2
dumpbin.exe
带有该选项的SDK 工具/headers
包含此信息,请比较这两个(我已将关键信息加粗)
PS [64] E:\ #4> dumpbin /headers C:\Windows\system32\cmd.exe Microsoft (R) COFF/PE 转储程序版本 10.00.40219.01 版权所有 (C) Microsoft Corporation。保留所有权利。 文件 C:\Windows\system32\cmd.exe 的转储 发现 PE 签名 文件类型:可执行映像 文件头值 8664 机器 (x64) 6 个部分 4CE798E5 时间日期戳 2010 年 11 月 20 日星期六 09:46:13 0 文件指针指向符号表 0 个符号 F0 可选头的大小 22 个特点 可执行文件 应用程序可以处理大地址(>2GB) [...]
和
PS [64] E:\ #5> dumpbin /headers C:\Windows\syswow64\cmd.exe Microsoft (R) COFF/PE 转储程序版本 10.00.40219.01 版权所有 (C) Microsoft Corporation。保留所有权利。 文件 C:\Windows\syswow64\cmd.exe 的转储 发现 PE 签名 文件类型:可执行映像 文件头值 14C 机器 (x86) 4 节数 4CE78E2B 时间日期戳 2010 年 11 月 20 日星期六 09:00:27 0 文件指针指向符号表 0 个符号 E0 可选头的大小 102 个特征 可执行文件 32位字机 [...]
答案3
如果你没有或者不想要整个 Windows SDK 或 Visual Studio,你可以使用sigcheck.exe
来自 SysInternals:
sigcheck.exe C:\Windows\Notepad.exe
输出:
Sigcheck v2.1 - File version and signature viewer
Copyright (C) 2004-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
c:\windows\notepad.exe:
Verified: Signed
Signing date: 8:59 AM 8/22/2013
Publisher: Microsoft Windows
Description: Notepad
Product: Microsoft« Windows« Operating System
Prod version: 6.3.9600.16384
File version: 6.3.9600.16384 (winblue_rtm.130821-1623)
MachineType: 64-bit
答案4
许多人都有优秀的7-zip已安装,并将 7-Zip 文件夹添加到其PATH
. 7-zip 可识别除 ZIP 和 RAR 之外的文件格式,例如 MSI 文件和 PE 可执行文件。只需7z.exe
在相关的 PE 文件(Exe 或 DLL)上使用命令行:
7z l some.exe | more
7z l some.exe | findstr CPU
输出将包含如下行,其中CPU
行号为 或x86
,x64
这正是这里所要求的:
Path = C:\Extra\AV\neroAacEnc.exe
Type = PE
CPU = x86
Characteristics = Executable 32-bit
Path = C:\Extra\AV\LAME\lame_enc.dll
Type = PE
CPU = x86
Characteristics = Executable DLL 32-bit
Path = C:\Extra\AV\FFmpeg\bin\ffmpeg.exe
Type = PE
CPU = x64
64-bit = +
Characteristics = Executable LargeAddress NoRelocs NoLineNums NoLocalSyms NoDebugInfo
Path = C:\Extra\AV\FFmpeg\bin\avcodec-56.dll
Type = PE
CPU = x64
64-bit = +
Characteristics = Executable DLL LargeAddress NoLineNums NoLocalSyms NoDebugInfo