MS-DOS EXE
(Added sample files) |
|||
Line 6: | Line 6: | ||
|kaitai struct=dos_mz | |kaitai struct=dos_mz | ||
}} | }} | ||
− | '''MS-DOS EXE''', also known as '''MZ''' format, is an executable file format used mainly by [[MS-DOS]]. It is the successor of [[DOS executable (.com)|COM]]. A number of other executable formats are extensions of it; see [[EXE]] for those formats. | + | '''MS-DOS EXE''' (or '''DOS EXE'''), also known as '''MZ''' format, is an executable file format used mainly by [[MS-DOS]]. It is the successor of [[DOS executable (.com)|COM]]. A number of other executable formats are extensions of it; see [[EXE]] for those formats. |
+ | |||
+ | == Format details == | ||
+ | === Header structure === | ||
+ | DOS EXE files begin with a fixed 28-byte header. | ||
+ | |||
+ | The field names in this table are taken from the IMAGE_DOS_HEADER structure defined in modern Windows SDKs. Byte order is little-endian. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Offset !! Type !! Name !! Description and remarks | ||
+ | |- | ||
+ | |0 || byte[2] || e_magic || Signature - ASCII "<code>MZ</code>" or "<code>ZM</code>" | ||
+ | |- | ||
+ | |2 || uint16 || e_cblp || If nonzero, the number of bytes in the last page | ||
+ | |- | ||
+ | |4 || uint16 || e_cp || Number of 512-byte pages in the file, not counting the "overlay" segment | ||
+ | |- | ||
+ | |6 || uint16 || e_crlc || Number of relocations | ||
+ | |- | ||
+ | |8 || uint16 || e_cparhdr || Header size, in 16-byte paragraphs | ||
+ | |- | ||
+ | |10 || uint16 || e_minalloc || Minimum allocation | ||
+ | |- | ||
+ | |12 || uint16 || e_maxalloc || Maximum allocation | ||
+ | |- | ||
+ | |14 || int16 || e_ss || Initial SS register | ||
+ | |- | ||
+ | |16 || uint16 || e_sp || Initial SP register | ||
+ | |- | ||
+ | |18 || uint16 || e_csum || Checksum - Usually unused and set to 0 | ||
+ | |- | ||
+ | |20 || uint16 || e_ip || Initial IP register | ||
+ | |- | ||
+ | |22 || int16 || e_cs || Initial CS register | ||
+ | |- | ||
+ | |24 || uint16 || e_lfarlc || Relocation table offset, in bytes from the start of the file | ||
+ | |- | ||
+ | |26 || uint16 || e_ovno || Overlay number (or other custom data) - Usually unused | ||
+ | |} | ||
== Identification == | == Identification == |
Revision as of 19:34, 3 July 2022
MS-DOS EXE (or DOS EXE), also known as MZ format, is an executable file format used mainly by MS-DOS. It is the successor of COM. A number of other executable formats are extensions of it; see EXE for those formats.
Contents |
Format details
Header structure
DOS EXE files begin with a fixed 28-byte header.
The field names in this table are taken from the IMAGE_DOS_HEADER structure defined in modern Windows SDKs. Byte order is little-endian.
Offset | Type | Name | Description and remarks |
---|---|---|---|
0 | byte[2] | e_magic | Signature - ASCII "MZ " or "ZM "
|
2 | uint16 | e_cblp | If nonzero, the number of bytes in the last page |
4 | uint16 | e_cp | Number of 512-byte pages in the file, not counting the "overlay" segment |
6 | uint16 | e_crlc | Number of relocations |
8 | uint16 | e_cparhdr | Header size, in 16-byte paragraphs |
10 | uint16 | e_minalloc | Minimum allocation |
12 | uint16 | e_maxalloc | Maximum allocation |
14 | int16 | e_ss | Initial SS register |
16 | uint16 | e_sp | Initial SP register |
18 | uint16 | e_csum | Checksum - Usually unused and set to 0 |
20 | uint16 | e_ip | Initial IP register |
22 | int16 | e_cs | Initial CS register |
24 | uint16 | e_lfarlc | Relocation table offset, in bytes from the start of the file |
26 | uint16 | e_ovno | Overlay number (or other custom data) - Usually unused |
Identification
An MS-DOS EXE file begins with an ASCII signature of "MZ
" (or, rarely, "ZM
"), followed by a series of 16-bit fields. The field at offset 24 (the relocation table offset) is usually (but apparently not always) less than 64, and at least 28. A value of 64 or more, or 0, suggests the format may not be MS-DOS EXE.
It's not clear whether there is any completely reliable way to identify an MS-DOS EXE, except in the negative (i.e. it begins with "MZ", and is not a valid NE, PE, etc., file).
Sample files
Links
- Wikipedia article
- MZ, from the OSDev Wiki
- http://www.delorie.com/djgpp/doc/exe/
- DOS EXE format
- EXE Explorer utility
- Ralf Brown's Interrupt Reference has an extensive list of (mostly older) MZ-based executable formats