Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I've got a third-party application (in this case Cognos Data Manager) installed on 64-bit Windows Server 2003.

Is there a quick way to determine if an application has been built/compiled as a 64-bit application or as a 32-bit application?

By default a program wanted to be installed in Program Files (x86). I'm guessing that means that it is a 32-bit version. I had to get it to talk to an Oracle database and to get that working I eventually reinstalled it in a directory path which didn't have brackets "(" and ")" in it, as that was causing a problem. I've also installed both 64-bit and 32-bit Oracle clients.

For future reference, I'd like to be able to type a command "xxxx fred.exe" and have it tell me whether fred.exe would be needing 32-bit or 64-bit setup (eg ODBC data sources etc).

share|improve this question

10 Answers 10

up vote 56 down vote accepted

If you run the application, in Task Manager it should have a *32 beside it to indicate it's 32-bit. I'm pretty sure they had this implemented in Server 2003, not positive though, hopefully someone can clarify.

You could also run it through PEiD. PEiD does not support 64-bit PEs, so it will choke if it's 64-bit.

There is also the famous GNU file for Windows. It will tell you all sorts of information about an executable.

Example:

$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

As you can see, the 64-bit WinRAR installer is classified as PE32+, which signifies a 64-bit executable. The 32-bit application is simply PE32, a 32-bit executable.

share|improve this answer
3  
Grabbed GnuFile and it worked great. Thanks. –  Gary Feb 1 '10 at 2:01
1  
You're very welcome :) –  John T Feb 1 '10 at 2:03
1  
An alternative to Task Manager could be Process Explorer, you can add the Image Type column there. Through the Options menu you can replace Task Manager by this if you want to... :-) –  Tom Wijsman Sep 3 '10 at 15:07
    
What does GNU file show with programs like Process Explorer, which have a 32-bit stub that detects it's running on a 64-bit system and unpacks a 64-bit image to execute? –  afrazier Sep 4 '10 at 12:43
1  
To install file from GnuWin32, download 'complete package' (rather than 'binaries') from gnuwin32.sourceforge.net/packages/file.htm –  Colonel Panic Jan 2 '13 at 16:28

If you got Visual Studio or the Platform SDK installed you can use dumpbin /headers to look at the PE header values.

Example for a 64-bit executable:

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
               ...

And for 32 bit:

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
               ...

The first value in the file header tells you the architecture: either 0x14C for x86 or 0x8664 for x64.

share|improve this answer
    
Interesting and detailed approach, I really need to start programming again, +1. –  John T Jan 31 '10 at 22:21

If you have a hex editor program, just open your file with it and shortly after the standard header intro stuff (like "This program cannot be run in DOS mode...") you will see either

"PE..L" (hex code: 504500004C) = 32 bit

or

"PE..d†" (hex code: 504500006486) = 64 bit

share|improve this answer
    
I use Total Commander as my file manager, so for me, this is an the simplest solution. I can just press F3 to view the start of the file and have the answer instantly. –  mivk Jun 13 '12 at 20:04
1  
Ew, they actually wrote "64" "86" as human-readable bytes in there to indicate 64 bit. How ugly :) –  Nyerguds Apr 28 at 6:27

The easiest way, without installing another program or running the file, is just to right click on the file, choose Properties, and then go the the Compatibility options tab. If there are no greyed out options and Windows XP and 9x modes are offered, it's 32-bit. If there are greyed out options and Vista is the earliest mode offered, it's 64-bit.

The *32 notice is not available in Windows 8 with its new task manager, so this is the only way on that platform.

share|improve this answer
    
Sounds reasonable enough. –  ArtOfWarfare Aug 30 '13 at 12:39
    
Yeah I like this one. I want to check it for one single file and didn't want to load my laptop full of downloaded crap... –  Gottlieb Notschnabel Feb 13 at 10:11

alt textEXE Explorer
Executable File Explorer for OS/2, NE, PE32, PE32+ and VxD file types.

This application is based on MiTeC Portable Executable Reader. It reads and displays executable file properties and structure. It is compatible with PE32 (Portable Executable), PE32+ (64bit), NE (Windows 3.x New Executable) and VxD (Windows 9x Virtual Device Driver) file types. .NET executables are supported too.

It enumerates introduced classes, used units and forms for files compiled by Borland compilers.

Note: It comes with a GUI and lets you 'explore' the Windows binary file structure.
Sadly, it does not seem to even accept a target binary to open from the command line. But the detail it gives might be useful in some cases.

share|improve this answer

Another simple way is to use PESnoop:

C:\> pesnoop photoshop.exe /pe_dh


-------------------------------------------------------------------------------
 PESnoop 2.0 - Advanced PE32/PE32+/COFF OBJ,LIB command line dumper by yoda
-------------------------------------------------------------------------------

Dump of file: photoshop.exe...
Modus:        64bit Portable Executable Image...
...

One place to get PESnoop is here: http://www.prestosoft.com/download/plugins/PESnoop.zip

-- Dave

share|improve this answer

And for you GUI enthusiasts, the absolute easiest way is to install this Explorer extension:

http://www.silurian.com/win32/inspect.htm

-- Dave

share|improve this answer
    
"Installation Failed". Yay. –  ArtOfWarfare Aug 30 '13 at 12:35

filever /bad *.exe

WAMD64 or W32i or W16 will be in the first column.

share|improve this answer

Dependency Walker is a useful GUI tool to verify not only exe files but also DLL files. A 64 bit DLL or EXE file will have a little 64 icon next to it.

share|improve this answer

If you run the program, you can use "Process Monitor" (ProcMon) from Sysinternal Suite.

Its portable and gives you a lot of info about your processes.

http://technet.microsoft.com/en-us/sysinternals/bb896645

share|improve this answer
    
That’s probably overkill. –  Synetech May 31 at 17:35

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.