是否可以快速确定应用程序是否已按以下方式构建/编译:是64位应用程序还是32位应用程序?
默认情况下,要在程序文件(x86)中安装一个程序。我猜这意味着它是32位版本。我必须让它与Oracle数据库进行通信,然后才能正常工作,我最终将其重新安装在目录路径中,该路径中没有括号“(”和“)”,因为这引起了问题。我还安装了64位和32位Oracle客户端。
为了便于参考,我希望能够键入命令
“ xxxx fred.exe”
,并告诉我fred.exe是否需要32位或64位设置(例如ODBC数据源等)。
#1 楼
如果运行该应用程序,则在任务管理器中它旁边应该带有* 32表示它是32位的。我很确定他们已经在Server 2003中实现了该功能,尽管效果不佳,希望有人可以澄清一下。也可以通过PEiD运行它。 PEiD不支持64位PE,因此如果使用64位PE将会阻塞。
还有Windows著名的GNU文件。它将告诉您有关可执行文件的各种信息。
示例:
$ file winrar-x64-392b1.exe
winrar-x64-392b1.exe: PE32+ executable for MS Windows (GUI)
$ file display.exe
display.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit</pre>
您可以看到,64位WinRAR安装程序被归类为PE32 +,表示64位可执行文件。 32位应用程序就是PE32,它是32位可执行文件。
评论
非常欢迎您:)
– John T
2010-2-1在2:03
任务管理器的替代品可以是Process Explorer,您可以在其中添加Image Type列。如果您要...,则可以通过“选项”菜单替换“任务管理器”::-)
–塔玛拉·维斯曼(Tamara Wijsman)
2010-09-3 15:07
GNU文件在诸如Process Explorer之类的程序中显示什么,该程序具有一个32位存根,可以检测到它在64位系统上运行并解压缩要执行的64位映像?
–非洲
2010年9月4日于12:43
下载并尝试一下吗?
– John T
2010-09-04 14:43
要从GnuWin32安装文件,请从gnuwin32.sourceforge.net/packages/file.htm下载“ complete package”(而不是“ binaries”)。
–上校恐慌
13年1月2日在16:28
#2 楼
不安装其他程序或运行文件的最简单方法是,右键单击该文件,选择“属性”,然后转到“兼容性”选项卡。如果没有灰色选项,并且提供Windows XP和9x模式,则为32位。如果有灰色选项,并且Vista是最早提供的模式,则为64位。如果已经启动了应用程序,您当然仍然可以使用其他答案中提到的* 32想法。但是,这在Windows 8.x及其新任务管理器中不可用。幸运的是,可以通过右键单击“详细信息”选项卡中的列标题并选择“选择列”来启用“平台”列。该列将包含“ 32位”或“ 64位”。
评论
听起来足够合理。
–ArtOfWarfare
13年8月30日在12:39
是的,我喜欢这个。我想检查一个文件,但不想将下载的废话全部加载到笔记本电脑中...
– Gottlieb Notschnabel
14年2月13日在10:11
* 32通知在Windows 8的任务管理器中不可用,但有一个“平台”列,默认情况下不可见。见7tutorials.com/…
–皮诺
2015年5月8日14:50
谢谢@Pino。在使用Windows 8的过程中,我从来没有任何理由要弄清楚这一点。(当HD崩溃时,我又回到了Windows 7,我意识到我从未使用过任何W8应用程序。)我将更新答案。
– trlkly
2015年5月9日20:05
#3 楼
如果安装了Visual Studio或Platform SDK,则可以使用dumpbin /headers
查看PE标头值。64位可执行文件的示例:
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64)
5 number of sections
4987EDCA time date stamp Tue Feb 03 08:10:02 2009
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
23 characteristics
Relocations stripped
Executable
Application can handle large (>2GB) addresses
OPTIONAL HEADER VALUES
20B magic # (PE32+)
8.00 linker version
2A600 size of code
18A00 size of initialized data
0 size of uninitialized data
2AE90 entry point (000000000042AE90)
1000 base of code
...
对于32位:
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
4B0C786D time date stamp Wed Nov 25 01:21:01 2009
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
103 characteristics
Relocations stripped
Executable
32 bit word machine
OPTIONAL HEADER VALUES
10B magic # (PE32)
9.00 linker version
42000 size of code
4000 size of initialized data
6F000 size of uninitialized data
B0EE0 entry point (004B0EE0)
70000 base of code
...
文件头中的第一个值告诉您该体系结构:x86的0x14C或x64的0x8664。 />
评论
有趣且详细的方法,我真的需要重新开始编程,+ 1。
– John T
2010年1月31日在22:21
#4 楼
如果您有一个十六进制编辑器程序,只需用它打开文件,然后在标准标题介绍性内容(例如“此程序无法在DOS模式下运行...”)之后不久,您就会看到“ PE..L”(十六进制代码:504500004C)= 32位
或
“ PE..d†”(十六进制代码:504500006486)= 64位
评论
我将Total Commander用作文件管理器,因此对我来说,这是最简单的解决方案。我可以按F3来查看文件的开头并立即获得答案。
– mivk
2012年6月13日20:04
w,他们实际上将“ 64”“ 86”写为可读字节,以指示64位。多么丑陋:)
– Nyerguds
2014年4月28日在6:27
@Nyerguds为什么很难看?它被称为hexspeak,非常常用,尤其是在魔术数字。例如,facebook的IPv6是*:FACE:B00C:*
–phuclv
17 Mar 24 '17 at 13:09
根本不一样。您只是在谈论十六进制的leetspeak。这实际上是使用数字100表示“ 64”,因为它看起来像十六进制的6和4。
– Nyerguds
17 Mar 25 '17在22:36
@Nyerguds字符串“ 6486”以十六进制表示,这显然是十六进制,您可以在其中读取十六进制数字作为字符。当您将0xD用作D时,它看起来像D,那么0xDEADBEEF怎么了?如果是丑陋的,那么BCD也是丑陋的,您实际上使用数字100表示64
–phuclv
17年3月31日15:35
#5 楼
EXE资源管理器适用于OS / 2,NE,PE32,PE32 +和VxD文件类型的可执行文件资源管理器。它读取并显示可执行文件的属性和结构。它与PE32(便携式可执行文件),PE32 +(64位),NE(Windows 3.x新的可执行文件)和VxD(Windows 9x虚拟设备驱动程序)文件类型兼容。 .NET可执行文件也受支持。
它枚举了Borland编译器编译的文件的引入的类,使用的单元和形式。二进制文件结构。
可悲的是,它似乎甚至不接受从命令行打开的目标二进制文件。
但是它提供的详细信息在某些情况下可能很有用。
#6 楼
您可以使用Sysinternals Suite中的sigcheck.exe
进行检查,例如$ sigcheck.exe some_app.exe
Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
C:/Program Files (x86)/Foo App\some_app.exe:
Verified: Signed
Signing date: 14:48 23/12/2015
Publisher: X
Company: X
Description: X
Product: Some App
Prod version: 5.0.0.1241
File version: 5.0.0.1241
MachineType: 32-bit
评论
这也适用于DLL。
–user34660
16 Sep 11'在7:45
#7 楼
另一种简单的方法是使用PESnoop:-戴夫
#8 楼
对于您的GUI爱好者来说,绝对最简单的方法是安装此Explorer扩展程序:http://www.silurian.com/win32/inspect.htm
-戴夫
评论
“安装失败”。好极了。
–ArtOfWarfare
13年8月30日在12:35
#9 楼
Dependency Walker是一个有用的GUI工具,不仅可以验证exe文件,还可以验证DLL文件。一个64位DLL或EXE文件旁边将带有一个小的64图标。#10 楼
filever /bad *.exe
WAMD64或W32i或W16将在第一列中。
#11 楼
如果运行该程序,则可以使用Sysinternals Suite中的“进程监视器”(ProcMon)。它可移植,并为您提供有关进程的大量信息。
评论
那可能太过分了。
– Synetech
2014年5月31日17:35
评论
如果应用程序位于Progam Files(x86)文件夹中,则绝不能确保该应用程序是64位编译的。这只是大多数安装人员遵循的约定。例如Chrome 64位被安装到x86文件夹中(可悲)。是否有命令行工具可以检查exe的32位或64位?如何在Windows上检查二进制文件是32位还是64位?