LKBEN10922: Howto find out if an executable (exe) is 64-bit or 32-bit on a Windows 64 bit system
Symptom
You need to know for sure if you are dealing with 64 are 32 programs
Cause
PE32 or PE32+ are not the same
Solution
You can use the dumpbin utility to show the headers of the PE (program executable) file. This will tell you exactly what kind of exe file you have.
Dumpbin is delivered with visual studio and needs to be in your searchpath.
e.g.:
You are looking for the machine or magic line in the output.
Dumpbin /headers books.exe | findstr /i "machine magic"
8664 machine (x64)
20B magic # (PE32+)
A full dump of the information will show something like this:
Dumpbin /headers books.exe
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file books.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64)
6 number of sections
4D11760A time date stamp Wed Dec 22 04:52:42 2010
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+)
9.00 linker version
10600 size of code
13200 size of initialized data
0 size of uninitialized data
9A00 entry point (0000000140009A00) WinMainCRTStartup
1000 base of code
140000000 image base (0000000140000000 to 0000000140026FFF)
1000 section alignment
200 file alignment
5.02 operating system version
0.00 image version
5.02 subsystem version
0 Win32 version
27000 size of image
400 size of headers
30E81 checksum
2 subsystem (Windows GUI)
8000 DLL characteristics
Terminal Server Aware
100000 size of stack reserve
1000 size of stack commit
100000 size of heap reserve
1000 size of heap commit
0 loader flags
10 number of directories
0 [ 0] RVA [size] of Export Directory
1C000 [ 78] RVA [size] of Import Directory
26000 [ 3C8] RVA [size] of Resource Directory
1B000 [ CCC] RVA [size] of Exception Directory
0 [ 0] RVA [size] of Certificates Directory
0 [ 0] RVA [size] of Base Relocation Directory
128A0 [ 1C] RVA [size] of Debug Directory
0 [ 0] RVA [size] of Architecture Directory
0 [ 0] RVA [size] of Global Pointer Directory
0 [ 0] RVA [size] of Thread Storage Directory
0 [ 0] RVA [size] of Load Configuration Directory
0 [ 0] RVA [size] of Bound Import Directory
1D690 [ 1618] RVA [size] of Import Address Table Directory
0 [ 0] RVA [size] of Delay Import Directory
0 [ 0] RVA [size] of COM Descriptor Directory
0 [ 0] RVA [size] of Reserved Directory
SECTION HEADER #1
.text name
104EA virtual size
1000 virtual address (0000000140001000 to 00000001400114E9)
10600 size of raw data
400 file pointer to raw data (00000400 to 000109FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
60000020 flags
Code
Execute Read
SECTION HEADER #2
.rdata name
751A virtual size
12000 virtual address (0000000140012000 to 0000000140019519)
7600 size of raw data
10A00 file pointer to raw data (00010A00 to 00017FFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only
Debug Directories
Time Type Size RVA Pointer
-------- ------ -------- -------- --------
4D11760A cv 48 00015988 14388 Format: RSDS, {F7C66A74-9619-4825-B8B1-FF00031514CF}, 1, c:\qt-src-471-64bit\demos\books\debug\books.pdb
SECTION HEADER #3
.data name
7F0 virtual size
1A000 virtual address (000000014001A000 to 000000014001A7EF)
800 size of raw data
18000 file pointer to raw data (00018000 to 000187FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
C0000040 flags
Initialized Data
Read Write
SECTION HEADER #4
.pdata name
F3C virtual size
1B000 virtual address (000000014001B000 to 000000014001BF3B)
1000 size of raw data
18800 file pointer to raw data (00018800 to 000197FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only
SECTION HEADER #5
.idata name
9F4C virtual size
1C000 virtual address (000000014001C000 to 0000000140025F4B)
A000 size of raw data
19800 file pointer to raw data (00019800 to 000237FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
C0000040 flags
Initialized Data
Read Write
SECTION HEADER #6
.rsrc name
3C8 virtual size
26000 virtual address (0000000140026000 to 00000001400263C7)
400 size of raw data
23800 file pointer to raw data (00023800 to 00023BFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only
Summary
1000 .data
A000 .idata
1000 .pdata
8000 .rdata
1000 .rsrc
11000 .text
Disclaimer:
The information provided in this document is intended for your information only. Lubby makes no claims to the validity of this information. Use of this information is at own risk!About the Author
Author:
- Keskon GmbH & Co. KGWim Peeters is electronics engineer with an additional master in IT and over 30 years of experience, including time spent in support, development, consulting, training and database administration. Wim has worked with SQL Server since version 6.5. He has developed in C/C++, Java and C# on Windows and Linux. He writes knowledge base articles to solve IT problems and publishes them on the Lubby Knowledge Platform.