INF: Executable-File Header Format [P_WinSDK]
3.00
WINDOWS
PSSONLY | Windows 3 Developers Notes softlib ENDUSER
Summary:
Note: This article is part of a t of ven articles, collectively
called the "Windows 3.00 Developer's Notes." More information about
the contents of the other articles, and procedures for ordering a
hard-copy t, can be found in the knowledge ba article titled "INF:
The Windows 3.00 Developer's Notes" (Q65260).
This article can be found in the Software/Data Library by arching on
the word EXEFMT or S12688. EXEFMT was archived using the PKware
file-compression utility.
More Information:
Microsoft defined the gmented executable file format for Windows
applications and dynamic-link libraries (DLLs). This file format is
also referred to as the New Executable Format. This new format is an
extension of the existing MS-DOS .EXE format (old-style format). The
purpo of the gmented executable format is to provide the
information needed to support the dynamic linking and gmentation
capabilities of the Windows environment.
An executable file contains Microsoft Windows code and data, or
Windows code, data, and resources. Specific fields have been added to
the old-style .EXE format header to indicate the existence of the
gmented file format. The old-style header may contain a valid
executable program, called a stub program, that will be executed if
the program is run on MS-DOS (without Windows). This stub program
usually prints a message indicating that Microsoft Windows is required
to run the program. The gmented executable format extensions also
begin with a header that describes the contents and location of the
executable image in the file. The loader us this header information
when it loads the executable gments in memory.
======================================================================
OLD-STYLE HEADER EXTENSIONS
======================================================================
The old-style header contains information the loader expects for a DOS
executable file. It describes a stub program (WINSTUB) the loader can
place in memory when necessary, it points to the new-style header, and
it contains the stub programs relocation table.
The following illustrates the distinct parts of the old-style
executable format:
+-------------------------+
00h | Old-style header info |
+-------------------------+
20h | Rerved |
+-------------------------+
3Ch | Offt to gmented |
| .EXE header |
+-------------------------+
40h | Relocation table and |
| DOS stub program |
+-------------------------+
| Segmented .EXE Header |
| . |
| . |
| . |
The word at offt 18h in the old-
style .EXE header contains the
relative byte offt to the stub program's relocation table. If this
offt is 40h, then the double word at offt 3Ch is assumed to be the
relative byte offt from the beginning of the file to the beginning
of the gmented executable header. A new-format .EXE file is
identified if the gmented executable header contains a valid
signature. If the signature is not valid, the file is assumed to be an
old-style format .EXE file. The remainder of the old-style format
header will describe a DOS program, the stub. The stub may be any
valid program but will typically be a program that displays an error
message.
======================================================================
SEGMENTED EXE FORMAT
======================================================================
Becau Windows executable files are often larger than one gment
(64K), additional information (that does not appear in the old-style
header) is required so that the loader can load each gment properly.
The gmented EXE format was developed to provide the loader with this
information.
The gmented .EXE file has the following format:
+-----------------+
00h | Old-style EXE |
| Header |
+-----------------+
20h | Rerved |
+-----------------+
3Ch | Offt to | ---+
| Segmented Header| |
+-----------------+ |
40h | Relocation Table| |
| & Stub Program | |
+-----------------+ |
| | |
+-----------------+ |
xxh | Segmented EXE | <--+
| Header |
+-----------------+
| Segment Table |
+-----------------+
| Resource Table |
+-----------------+
| Resident Name |
| Table |
+-----------------+
| Module Reference|
| Table |
+-----------------+
| Imported Names |
| Table |
+-----------------+
| Entry Table |
+-----------------+
| Non-Resident |
| Name Table |
电锯惊魂8下载+-----------------+
| Seg #1 Data |
| Seg #1 Info |
+-----------------+
.
.
.
+-----------------+
| Seg #n Data |
| Seg #n Info |
+-----------------+
The following ctions describe each of the components that make up
the gmented EXE format. Each ction contains a description of the
component and the fields in the structures that make up that
component.
Note: All unud fields and flag bits are rerved for future u and
must contain 0 (zero) values.
======================================================================
SEGMENTED EXE HEADER
厦门漳州===================================
===================================
The gmented EXE header contains general information about the EXE
file and contains information on the location and size of the other
ctions. The Windows loader copies this ction, along with other
data, into the module table in the system data. The module table is
internal data ud by the loader to manage the loaded executable
modules in the system and to support dynamic linking.
The following describes the format of the gmented executable header.
For each field, the offt is given relative to the beginning of the
gmented header, the size of the field is defined, and a description
is given.
Offt Size Description
-
----- ---- -----------
00h DW Signature word.
"N" is low-order byte.
"E" is high-order byte.
02h DB Version number of the linker.
03h DB Revision number of the linker.
04h DW Entry Table file offt, relative to the beginning of
the gmented EXE header.
06h DW Number of bytes in the entry table.
08h DD 32-bit CRC of entire contents of file.
The words are taken as 00 during the calculation.
0Ch DW Flag word.
0000h = NOAUTODATA
0001h = SINGLEDATA (Shared automatic data gment)
0002h = MULTIPLEDATA (Instanced automatic data
gment)
2000h = Errors detected at link time, module will not
load.
8000h = Library module.
The SS:SP information is invalid, CS:IP points
to an initialization procedure that is called
with AX equal to the module handle. This
initialization procedure must perform a far
return to the caller, with AX not equal to
zero to indicate success, or AX equal to zero
to indicate failure to initialize. DS is t
to the library's data gment if the
SINGLEDATA flag is t. Otherwi, DS is t
to the caller's data gment.
A program or DLL can only contain dynamic
links to executable files that have this
library module flag t. One program cannot
dynamic-link to another program.
0Eh DW Segment number of automatic data gment.
This value is t to zero if SINGLEDATA and
MULTIPLEDATA flag bits are clear, NOAUTODATA is
indicated in the flags word.
A Segment number is an index into the module's gment
table. The first entry in the gment table is gment
number 1.
甘肃人力资源和社会保障网上办事大厅10h DW Initial size, in bytes, of dynami
c heap added to the
data gment. This value is zero if no initial local
heap is allocated.
12h DW Initial size, in bytes, of stack added to the data
gment. This value is zero to indicate no initial
stack allocation, or when SS is not equal to DS.
14h DD Segment number:offt of CS:IP.
18h DD Segment number:offt of SS:SP.
If SS equals the automatic data gment and SP equals
zero, the stack pointer is t to the top of the
automatic data gment just below the additional heap
area.
+--------------------------+
| additional dynamic heap |
四季作文400字
+--------------------------+ <- SP
| additional stack |
+--------------------------+
| loaded auto data gment |
雪乡旅游攻略
+--------------------------+ <- DS, SS
油炸活猫
1Ch DW Number of entries in the Segment Table.
1Eh DW Number of entries in the Module Reference Table.
20h DW Number of bytes in the Non-Resident Name Table.
22h DW Segment Table file offt, relative to the beginning
of the gmented EXE header.
24h DW Resource Table file offt, relative to the beginning
of the gmented EXE header.
26h DW Resident Name Table file offt, relative to the
beginning of the gmented EXE header.
28h DW Module Reference Table file offt, relative to the
beginning of the gmented EXE header.
2Ah DW Imported Names Table file offt, relative to the
beginning of the gmented EXE header.
2Ch DD Non-Resident Name Table offt, relative to the
beginning of the file.
30h DW Number of movable entries in the Entry Table.
32h DW Logical ctor alignment shift count, log(ba 2) of
the gment ctor size (default 9).
34h DW Number of resource entries.
36h DB Executable type, ud by loader.
02h = WINDOWS
37h-3Fh DB Rerved, currently 0's.
======================================================================
SEGMENT TABLE
======================================================================
The gment table contains an entry for each gment in the executable
file. The number of gment table entries are defined in the gmented
细枝末节是什么意思啊EXE header. The first entry in the gment table is gment number 1.
The following is the structure of a gment table entry.
Size Description
---- -----------
DW Logical-ctor offt (n byte) to the contents of the gment
data, relative to the beginning of the file. Zero means no
file data.
DW Length o
f the gment in the file, in bytes. Zero means 64K.
DW Flag word.
0007h = TYPE_MASK Segment-type field.
0000h = CODE Code-gment type.
0001h = DATA Data-gment type.
0010h = MOVEABLE Segment is not fixed.
0040h = PRELOAD Segment will be preloaded; read-only if
this is a data gment.
0100h = RELOCINFO Set if gment has relocation records.
F000h = DISCARD Discard priority.
DW Minimum allocation size of the gment, in bytes. Total size
of the gment. Zero means 64K.
======================================================================
RESOURCE TABLE
======================================================================
The resource table follows the gment table and contains entries for
each resource in the executable file. The resource table consists of
an alignment shift count, followed by a table of resource records. The
resource records define the type ID for a t of resources. Each
resource record contains a table of resource entries of the defined
type. The resource entry defines the resource ID or name ID for the
resource. It also defines the location and size of the resource. The
following describes the contents of each of the structures:
Size Description
---- -----------
DW Alignment shift count for resource data.
A table of resource type information blocks follows. The following
is the format of each type information block:
DW Type ID. This is an integer type if the high-order bit is
t (8000h); otherwi, it is an offt to the type string,
the offt is relative to the beginning of the resource
table. A zero type ID marks the end of the resource type
information blocks.
DW Number of resources for this type.
DD Rerved.
A table of resources for this type follows. The following is
the format of each resource (8 bytes each):
夏天荷花的描写
DW File offt to the contents of the resource data,
relative to beginning of file. The offt is in terms
of the alignment shift count value specified at
beginning of the resource table.
DW Length of the resource in the file (in bytes).
DW Flag word.
0010h = MOVEABLE Resource is not fixed.
0020h = PURE Resource can be shared.
0040h = PRELOAD Resource is preloaded.
DW Resource ID. This is an integer type if the high-order
bit is t (8000h), otherwi it is the offt to the
resource string, the offt is relative to the
beginning of the resource table.
DD Rerved.
Resource type and name strings are stored at the end of the
resource table. Note t