在 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 -> 可移植可执行文件