是否有命令行工具可以检查 exe 是 32 位还是 64 位?

是否有命令行工具可以检查 exe 是 32 位还是 64 位?

在 Windows 上,例如:

is64 abc.exe  
1  

is32 def.exe  
1  

而在 Windows 上,abc.exe 是 64 位编译的,而 def.exe 是 32 位编译的。

答案1

是否有命令行工具可以检查 exe 是 32 位还是 64 位?

是的

c:\Program Files (x86)\GnuWin32\bin>file file.exe
file.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit

c:\Program Files (x86)\GnuWin32\bin>cd ..\..\evernote\evernote   
c:\Program Files (x86)\Evernote\Evernote>file evernote.exe
evernote.exe; PE32 executable for MS Windows (GUI) Intel 80386 32-bit

c:\Program Files (x86)\Evernote\Evernote>cd c:\Program Files\Internet Explorer    
c:\Program Files\Internet Explorer>file iexplore.exe
iexplore.exe; PE32+ executable for MS Windows (GUI) Mono/.Net assembly

PE32 格式代表可移植可执行文件 32 位,而 PE32+ 代表可移植可执行文件 64 位格式。

http://gnuwin32.sourceforge.net/packages/file.htm

喜欢:

is64 abc.exe
1

不完全是那样。

您可以使用-b选项从输出中排除文件名,然后您只需要一些命令行功夫来提取第一个单词(PE32 或 PE32+)将其与 PE32+ 进行比较,然后在您的“f”语句中使用它。


Windows 10

在 Windows 10 上,如果你安装了周年更新,如果你启用 bash shell,您可以打开 bash shell 并使用file以下命令

rgb@MYPCNAME:/mnt/c$ file install.exe
install.exe: PE32 executable (GUI) Intel 80386, for MS Windows

或者

rgb@MYPCNAME:/mnt/c/Program Files/Internet Explorer$ file ieinstal.exe
ieinstal.exe: PE32+ executable (GUI) x86-64, for MS Windows

答案2

我编写了一对程序,严格按照你的要求执行(添加了有关错误等的错误消息)(实际上,它是一个具有定义的程序,可以改变其行为以使其完全准确,但这并不重要。)

你可以在我的 Dropbox 上找到它们,这里。源代码包含在软件包中,但如果不需要,您可以丢弃它。基本上只有在您不信任我的二进制文件的情况下才包含它。

使用示例

>is32 C:\Windows\System32\taskmgr.exe
1

>is64 C:\Windows\System32\taskmgr.exe
0

基本上,该程序的工作原理是首先对二进制文件进行内存映射,然后定位 PE 标头,最后简单地将 Machine 字段与您要求的架构的值进行比较。本质上是一个非常简单的过程。

答案3

$  file access-client-win32.exe 

access-client-win32.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit


$ file access-client-win64.exe

access-client-win64.exe: PE32+ executable for MS Windows (console) Mono/.Net assembly

win32.exe -> PE32

win64.exe -> PE32+

ps: PE -> 可移植可执行文件

相关内容