EXE
(→Identification) |
|||
Line 23: | Line 23: | ||
== Identification == | == Identification == | ||
− | All EXE formats start with ASCII signature "{{magic|MZ}}" or, rarely, "{{magic|ZM}}". The byte at offset 3 | + | All EXE formats start with ASCII signature "{{magic|MZ}}" or, rarely, "{{magic|ZM}}". |
+ | |||
+ | The byte at offset 3 ''should'' be <code>0x00</code> or <code>0x01</code>, as it is the high byte of a field whose valid values are 0 through 511. However, EXE files for which this is not the case do exist, and may be tolerated by the OS. | ||
The starting point for identifying extended formats is the field at offset 60, which if present, points to an extended header. | The starting point for identifying extended formats is the field at offset 60, which if present, points to an extended header. |
Revision as of 16:25, 4 August 2023
EXE is a family of executable file formats. It includes the original MS-DOS EXE format, and a number of newer formats built on top of that format. Most of them use the same .exe file extension.
Although all members of the EXE family have a file signature of "MZ", it seems that the term "MZ format" is generally used to mean only MS-DOS EXE (i.e. files designed for MS-DOS).
EXE files designed for operating systems other than MS-DOS usually contain a short program (called a DOS stub) which, when executed by DOS, prints a message like "This program cannot be run in DOS mode" or "This program requires Microsoft Windows", and immediately exits. Some programs contain a more functional DOS stub, e.g. the Windows 9x registry editor.
Formats
This is an incomplete outline of the EXE family of formats.
- EXE
- MS-DOS EXE
- NE (New Executable, 16-bit)
- Linear Executable
- LE (mixed 16/32-bit)
- LX (32-bit)
- PE (Portable Executable)
- PE32 (32-bit Windows)
- PE32+ (64-bit Windows)
Identification
All EXE formats start with ASCII signature "MZ
" or, rarely, "ZM
".
The byte at offset 3 should be 0x00
or 0x01
, as it is the high byte of a field whose valid values are 0 through 511. However, EXE files for which this is not the case do exist, and may be tolerated by the OS.
The starting point for identifying extended formats is the field at offset 60, which if present, points to an extended header.
Links
- Ralf Brown's Interrupt List, INT 21h, Function 4Bh, describes lots of the "older" style EXE formats
- EXE Explorer utility
See also the articles for the specific EXE formats.