programmers resources
  http://www.intel-assembler.it/  (c)2017 intel-assembler.it   info@intel-assembler.it
 
Search :  
Lingua Italiana    English Language   
Index
 
just an empty assembly space
just an arrow Intel Platform
just an arrow Article & Guides
just an arrow Download Software


23/01/2009 Featured Article: How to remove Buzus Virus (permalink)




:::3063320:::
Bottone Scambio Directory Pubblicitaonline.it
Home Page | Articles & Guides | Download | Intel Platform | Contacts

Google
 


Bookmark and Share
Download 
Tell a friend



EXE Executable-File Header Format (3.1)

A description of headers, resources, typeinfo

(by unknown)

A description of the EXE file format for Windows and DOS.
The descriptions include:
  • MS-DOS Header
  • Windows Header
  • Information Block
  • Segment Table
  • Resource Table
  • Type Information
  • Name Information
  • Resident-Name Table
  • Imported-Name Table
  • Entry Table
  • Nonresident-Name Table
  • Code Segments and Relocation Data



This article is online from 2846 days and has been seen 2197 times




.EXE Executable-File Header Format (3.1)

An executable (.EXE) file for the Microsoft Windows operating system contains 
a combination of code and data or a combination of code, data, and resources. 
The executable file also contains two headers: an MS-DOS header and a Windows 
header. 
The next two sections describe these headers; the third section describes the 
code and data contained in a Windows executable file. 

MS-DOS Header

The MS-DOS (old-style) executable-file header contains four distinct parts: a 
collection of header information (such as the 
signature word, the file size, and so on), a reserved section, a pointer to a 
Windows header (if one exists), and a stub program. 
The following illustration shows the MS-DOS executable-file header: 
If the word value at offset 18h is 40h or greater, the word value at 3Ch is ty
pically an offset to a Windows header. Applications must verify this for each 
executable-file header being tested, because a few applications have a differe
nt header style. 
MS-DOS uses the stub program to display a message if Windows has not been load
ed when the user attempts to run a program. 
For more information about the MS-DOS executable-file header, see the Microsof
t MS-DOS Programmer's Reference 
(Redmond, Washington: Microsoft Press, 1991). 

Windows Header

The Windows (new-style) executable-file header contains information that the l
oader requires for segmented executable files. 
This information includes the linker version number, data specified by the lin
ker, data specified by the resource compiler, tables of segment data, tables o
f resource data, and so on. The following illustration shows the Windows execu
table-file header: 
The following sections describe the entries in the Windows executable-file hea
der. 

Information Block

The information block in the Windows header contains the linker version number
, the lengths of various tables that further describe the executable file, the
 offsets from the beginning of the header to the beginning of these tables, th
e heap and stack sizes, and so on. The following list summarizes the contents 
of the header information block (the locations are relative to the beginning o
f the block): 

Location Description

00h Specifies the signature word. 
        The low byte contains "N" (4Eh) and the high byte contains "E" (45h). 
02h Specifies the linker version number. 
03h Specifies the linker revision number. 
04h Specifies the offset to the entry table 
        (relative to the beginning of the header). 
06h Specifies the length of the entry table, in bytes. 
08h Reserved. 
0Ch Specifies flags that describe the contents of the executable file. 
        This value can be one or more of the following bits: 

Bit Meaning

0 The linker sets this bit if the executable-file format is SINGLEDATA. An exe
cutable file with this format contains one data segment. This bit is set if th
e file is a dynamic-link library (DLL). 
1 The linker sets this bit if the executable-file format is MULTIPLEDATA. An e
xecutable file with this format contains multiple data segments. This bit is s
et if the file is a Windows application. 

If neither bit 0 nor bit 1 is set, the executable-file format is NOAUTODATA. 
An executable file with this format does not contain an automatic data segment


2 Reserved. 
3 Reserved. 
8 Reserved. 
9 Reserved. 
11 If this bit is set, the first segment in the executable file contains code 
that loads the application. 
13 If this bit is set, the linker detects errors at link time but still create
s an executable file. 
14 Reserved. 
15 If this bit is set, the executable file is a library module. 

If bit 15 is set, the CS:IP registers point to an initialization procedure cal
led with the value in the AX register equal to the module handle. The initiali
zation procedure must execute a far return to the caller. If the procedure is 
successful, the value in AX is nonzero. Otherwise, the value in AX is zero. 
The value in the DS register is set to the library's data segment if SINGLEDAT
A is set. Otherwise, DS is set to the data segment of the application that loa
ds the library. 

0Eh Specifies the automatic data segment number. (0Eh is zero if the SINGLEDAT
A and MULTIPLEDATA bits are cleared.) 
10h Specifies the initial size, in bytes, of the local heap. This value is zer
o if there is no local allocation. 
12h Specifies the initial size, in bytes, of the stack. This value is zero if 
the SS register value does not equal the DS register value. 
14h Specifies the segment:offset value of CS:IP. 
18h Specifies the segment:offset value of SS:SP. 

The value specified in SS is an index to the module's segment table. The first
 entry in the segment table corresponds to segment number 1. 
If SS addresses the automatic data segment and SP is zero, SP is set to the ad
dress obtained by adding the size of the automatic data segment to the size of
 the stack. 

1Ch Specifies the number of entries in the segment table. 
1Eh Specifies the number of entries in the module-reference table. 
20h Specifies the number of bytes in the nonresident-name table. 
22h Specifies a relative offset from the beginning of the Windows header to th
e beginning of the segment table. 
24h Specifies a relative offset from the beginning of the Windows header to th
e beginning of the resource table. 
26h Specifies a relative offset from the beginning of the Windows header to th
e beginning of the resident-name table. 
28h Specifies a relative offset from the beginning of the Windows header to th
e beginning of the module-reference table. 
2Ah Specifies a relative offset from the beginning of the Windows header to th
e beginning of the imported-name table. 
2Ch Specifies a relative offset from the beginning of the file to the beginnin
g of the nonresident-name table. 

30h Specifies the number of movable entry points. 
32h Specifies a shift count that is used to align the logical sector. This cou
nt is log2 of the segment sector size. It is 
typically 4, although the default count is 9. (This value corresponds to the /
alignment [/a] linker switch. When the 
linker command line contains /a:16, the shift count is 4. When the linker comm
and line contains /a:512, the shift 
count is 9.) 
34h Specifies the number of resource segments. 
36h Specifies the target operating system, depending on which bits are set: 

Bit Meaning

0 Operating system format is unknown. 
1 Reserved. 
2 Operating system is Microsoft Windows. 
3 Reserved. 
4 Reserved. 

37h Specifies additional information about the executable file. It can be one 
or more of the following values: 

Bit Meaning

1 If this bit is set, the executable file contains a Windows 2.x application t
hat runs in version 3.x protected mode. 
2 If this bit is set, the executable file contains a Windows 2.x application t
hat supports proportional fonts. 
3 If this bit is set, the executable file contains a fast-load area. 

38h Specifies the offset, in sectors, to the beginning of the fast-load area. 
(Only Windows uses this value.) 
3Ah Specifies the length, in sectors, of the fast-load area. (Only Windows use
s this value.) 
3Ch Reserved. 
3Eh Specifies the expected version number for Windows. (Only Windows uses this
 value.) 

Segment Table

The segment table contains information that describes each segment in an execu
table file. This information includes the 
segment length, segment type, and segment-relocation data. The following list 
summarizes the values found in the segment 
table (the locations are relative to the beginning of each entry): 

Location Description

00h Specifies the offset, in sectors, to the segment data (relative to the beg
inning of the file). A value of zero means no 
data exists. 
02h Specifies the length, in bytes, of the segment, in the file. A value of ze
ro indicates that the segment length is 64K, 
unless the selector offset is also zero. 
04h Specifies flags that describe the contents of the executable file. This va
lue can be one or more of the following: 

Bit Meaning

0 If this bit is set, the segment is a data segment. Otherwise, the segment is
 a code segment. 
1 If this bit is set, the loader has allocated memory for the segment. 
2 If this bit is set, the segment is loaded. 
3 Reserved. 
4 If this bit is set, the segment type is MOVABLE. Otherwise, the segment type
 is FIXED. 
5 If this bit is set, the segment type is PURE or SHAREABLE. Otherwise, the se
gment type is IMPURE or 
NONSHAREABLE. 
6 If this bit is set, the segment type is PRELOAD. Otherwise, the segment type
 is LOADONCALL. 
7 If this bit is set and the segment is a code segment, the segment type is EX
ECUTEONLY. If this bit is set 
and the segment is a data segment, the segment type is READONLY. 

8 If this bit is set, the segment contains relocation data. 
9 Reserved. 
10 Reserved. 
11 Reserved. 
12 If this bit is set, the segment is discardable. 
13 Reserved. 
14 Reserved. 
15 Reserved. 

06h Specifies the minimum allocation size of the segment, in bytes. A value of
 zero indicates that the minimum allocation 
size is 64K. 

Resource Table

The resource table describes and identifies the location of each resource in t
he executable file. The table has the following form: 

WORD     rscAlignShift;
TYPEINFO rscTypes[];
WORD     rscEndTypes;
BYTE     rscResourceNames[];
BYTE     rscEndNames;

Following are the members in the resource table: 

rscAlignShift Specifies the alignment shift count for resource data. When the 
shift count is used as an exponent of 2, 
the resulting value specifies the factor, in bytes, for computing the location
 of a resource in the 
executable file. 
rscTypes Specifies an array of TYPEINFO structures containing information abou
t resource types. There must 
be one TYPEINFO structure for each type of resource in the executable file. 
rscEndTypes Specifies the end of the resource type definitions. This member mu
st be zero. 
rscResourceNames Specifies the names (if any) associated with the resources in
 this table. Each name is stored as 
consecutive bytes; the first byte specifies the number of characters in the na
me. 
rscEndNames Specifies the end of the resource names and the end of the resourc
e table. This member must be 
zero. 

Type Information

The TYPEINFO structure has the following form: 

typedef struct _TYPEINFO {
    WORD        rtTypeID;
    WORD        rtResourceCount;
    DWORD       rtReserved;
    NAMEINFO    rtNameInfo[];
} TYPEINFO;

Following are the members in the TYPEINFO structure: 

rtTypeID Specifies the type identifier of the resource. This integer value is 
either a resource-type value or an offset 
to a resource-type name. If the high bit in this member is set (0x8000), the v
alue is one of the following 
resource-type values: 

Value Resource type

RT_ACCELERATOR Accelerator table 
RT_BITMAP Bitmap 
RT_CURSOR Cursor 
RT_DIALOG Dialog box 
RT_FONT Font component 
RT_FONTDIR Font directory 
RT_GROUP_CURSOR Cursor directory 
RT_GROUP_ICON Icon directory 
RT_ICON Icon 
RT_MENU Menu 
RT_RCDATA Resource data 
RT_STRING String table 

If the high bit of the value in this member is not set, the value represents a
n offset, in bytes relative to the 
beginning of the resource table, to a name in the rscResourceNames member. 

rtResourceCount Specifies the number of resources of this type in the executab
le file. 
rtReserved Reserved. 
rtNameInfo Specifies an array of NAMEINFO structures containing information ab
out individual resources. The 
rtResourceCount member specifies the number of structures in the array. 

Name Information

The NAMEINFO structure has the following form: 

typedef struct _NAMEINFO {
    WORD rnOffset;
    WORD rnLength;
    WORD rnFlags;
    WORD rnID;
    WORD rnHandle;
    WORD rnUsage;
} NAMEINFO;

Following are the members in the NAMEINFO structure: 

rnOffset Specifies an offset to the contents of the resource data (relative to
 the beginning of the file). The offset is in terms of 
alignment units specified by the rscAlignShift member at the beginning of the 
resource table. 
rnLength Specifies the resource length, in bytes. 
rnFlags Specifies whether the resource is fixed, preloaded, or shareable. This
 member can be one or more of the following 
values: 

Value Meaning

0x0010 Resource is movable (MOVEABLE). Otherwise, it is fixed. 
0x0020 Resource can be shared (PURE). 
0x0040 Resource is preloaded (PRELOAD). Otherwise, it is loaded on demand. 

rnID Specifies or points to the resource identifier. If the identifier is an i
nteger, the high bit is set (8000h). Otherwise, it is an 
offset to a resource string, relative to the beginning of the resource table. 
rnHandle Reserved. 
rnUsage Reserved. 

Resident-Name Table

The resident-name table contains strings that identify exported functions in t
he executable file. As the name implies, these strings 
are resident in system memory and are never discarded. The resident-name strin
gs are case-sensitive and are not 
null-terminated. The following list summarizes the values found in the residen
t-name table (the locations are relative to the 
beginning of each entry): 

Location Description

00h Specifies the length of a string. If there are no more strings in the tabl
e, this value is zero. 
01h - xxh Specifies the resident-name text. This string is case-sensitive and 
is not null-terminated. 
xxh + 01h Specifies an ordinal number that identifies the string. This number 
is an index into the entry table. 

The first string in the resident-name table is the module name. 

Module-Reference Table

The module-reference table contains offsets for module names stored in the imp
orted-name table. Each entry in this table is 2 
bytes long. 

Imported-Name Table

The imported-name table contains the names of modules that the executable file
 imports. Each entry contains two parts: a single 
byte that specifies the length of the string and the string itself. The string
s in this table are not null-terminated. 

Entry Table

The entry table contains bundles of entry points from the executable file (the
 linker generates each bundle). The numbering 
system for these ordinal values is 1-based--that is, the ordinal value corresp
onding to the first entry point is 1. 
The linker generates the densest possible bundles under the restriction that i
t cannot reorder the entry points. This restriction is 
necessary because other executable files may refer to entry points within a gi
ven bundle by their ordinal values. 
The entry-table data is organized by bundle, each of which begins with a 2-byt
e header. The first byte of the header specifies the 
number of entries in the bundle (a value of 00h designates the end of the tabl
e). The second byte specifies whether the 
corresponding segment is movable or fixed. If the value in this byte is 0FFh, 
the segment is movable. If the value in this byte is 
0FEh, the entry does not refer to a segment but refers, instead, to a constant
 defined within the module. If the value in this byte is 
neither 0FFh nor 0FEh, it is a segment index. 

For movable segments, each entry consists of 6 bytes and has the following for
m: 

Location Description

00h Specifies a byte value. This value can be a combination of the following b
its: 

Bit(s) Meaning

0 If this bit is set, the entry is exported. 
1 If this bit is set, the segment uses a global (shared) data segment. 
3-7 If the executable file contains code that performs ring transitions, these
 bits specify the number of words 
that compose the stack. At the time of the ring transition, these words must b
e copied from one ring to the 
other. 

01h Specifies an int 3fh instruction. 
03h Specifies the segment number. 
04h Specifies the segment offset. 

For fixed segments, each entry consists of 3 bytes and has the following form:
 

Location Description

00h Specifies a byte value. This value can be a combination of the following b
its: 

Bit(s) Meaning

0 If this bit is set, the entry is exported. 
1 If this bit is set, the entry uses a global (shared) data segment. (This may
 be set only for SINGLEDATA 
library modules.) 
3-7 If the executable file contains code that performs ring transitions, these
 bits specify the number of words 
that compose the stack. At the time of the ring transition, these words must b
e copied from one ring to the 
other. 

01h Specifies an offset. 

Nonresident-Name Table

The nonresident-name table contains strings that identify exported functions i
n the executable file. As the name implies, these 
strings are not always resident in system memory and are discardable. The nonr
esident-name strings are case-sensitive; they 
are not null-terminated. The following list summarizes the values found in the
 nonresident-name table (the specified locations are 
relative to the beginning of each entry): 

Location Description

00h Specifies the length, in bytes, of a string. If this byte is 00h, there ar
e no more strings in the table. 
01h - xxh Specifies the nonresident-name text. This string is case-sensitive a
nd is not null-terminated. 
xx + 01h Specifies an ordinal number that is an index to the entry table. 

The first name that appears in the nonresident-name table is the module descri
ption string (which was specified in the 
module-definition file). 

Code Segments and Relocation Data

Code and data segments follow the Windows header. Some of the code segments ma
y contain calls to functions in other 
segments and may, therefore, require relocation data to resolve those referenc
es. This relocation data is stored in a relocation 
table that appears immediately after the code or data in the segment. The firs
t 2 bytes in this table specify the number of 
relocation items the table contains. A relocation item is a collection of byte
s specifying the following information: 

Address type (segment only, offset only, segment and offset) 

Relocation type (internal reference, imported ordinal, imported name) 

Segment number or ordinal identifier (for internal references) 

Reference-table index or function ordinal number (for imported ordinals) 

Reference-table index or name-table offset (for imported names) 

Each relocation item contains 8 bytes of data, the first byte of which specifi
es one of the following relocation-address types: 

Value Meaning

0 Low byte at the specified offset 
2 16-bit selector 
3 32-bit pointer 
5 16-bit offset 
11 48-bit pointer 
13 32-bit offset 

The second byte specifies one of the following relocation types: 

Value Meaning

0 Internal reference 
1 Imported ordinal 
2 Imported name 
3 OSFIXUP 

The third and fourth bytes specify the offset of the relocation item within th
e segment. 
If the relocation type is imported ordinal, the fifth and sixth bytes specify 
an index to a module's reference table and the seventh and eighth bytes specif
y a function ordinal value. 
If the relocation type is imported name, the fifth and sixth bytes specify an 
index to a module's reference table and the seventh and 
eighth bytes specify an offset to an imported-name table. 
If the relocation type is internal reference and the segment is fixed, the fif
th byte specifies the segment number, the sixth byte is zero, and the seventh 
and eighth bytes specify an offset to the segment. If the relocation type is i
nternal reference and the segment is movable, the fifth byte specifies 0FFh, t
he sixth byte is zero; and the seventh and eighth bytes specify an ordinal val
ue found in the segment's entry table. 




Top
Download 
Tell a friend
Bookmark and Share


 Tags: exe


webmaster jes
writers rguru, tech-g, aiguru, drAx

site optimized for IE/Firefox/Chrome with 1024x768 resolution

Valid HTML 4.01 Transitional


ALL TRADEMARKS ® ARE PROPERTY OF LEGITTIMATE OWNERS.
© ALL RIGHTS RESERVED.

hosting&web - www.accademia3.it

grossocactus
find rguru on
http://www.twitter.com/sicurezza3/
... send an email ...
Your name

Destination email

Message

captcha! Code