我在64位Windows Server 2003上安装了第三方应用程序(在本例中为Cognos Data Manager)。

是否可以快速确定应用程序是否已按以下方式构建/编译:是64位应用程序还是32位应用程序?

默认情况下,要在程序文件(x86)中安装一个程序。我猜这意味着它是32位版本。我必须让它与Oracle数据库进行通信,然后才能正常工作,我最终将其重新安装在目录路径中,该路径中没有括号“(”和“)”,因为这引起了问题。我还安装了64位和32位Oracle客户端。

为了便于参考,我希望能够键入命令
“ xxxx fred.exe”
,并告诉我fred.exe是否需要32位或64位设置(例如ODBC数据源等)。

评论

如果应用程序位于Progam Files(x86)文件夹中,则绝不能确保该应用程序是64位编译的。这只是大多数安装人员遵循的约定。例如Chrome 64位被安装到x86文件夹中(可悲)。

是否有命令行工具可以检查exe的32位或64位?如何在Windows上检查二进制文件是32位还是64位?

#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