| Format of .EXE file header | 
| Offset | Size | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 00h | 2 BYTEs | .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah) (see also #01593) | |||||||||
| 02h | WORD | number of bytes in last 512-byte page of executable | |||||||||
| 04h | WORD | total number of 512-byte pages in executable (includes any partial last page) | |||||||||
| 06h | WORD | number of relocation entries | |||||||||
| 08h | WORD | header size in paragraphs | |||||||||
| 0Ah | WORD | minimum paragraphs of memory required to allocate in addition to executable's size | |||||||||
| 0Ch | WORD | maximum paragraphs to allocate in addition to executable's size | |||||||||
| 0Eh | WORD | initial SS relative to start of executable | |||||||||
| 10h | WORD | initial SP | |||||||||
| 12h | WORD | checksum (one's complement of sum of all words in executable) | |||||||||
| 14h | DWORD | initial CS:IP relative to start of executable | |||||||||
| 18h | WORD | offset within header of relocation table 40h or greater for new-format (NE, LE, LX, W3, PE, etc.) executable | |||||||||
| 1Ah | WORD | overlay number (normally 0000h = main program) | |||||||||
| ---new executable--- | |||||||||||
| 1Ch | 4 BYTEs | ??? | |||||||||
| 20h | WORD | behavior bits | |||||||||
| 22h | 26 BYTEs | reserved for additional behavior info | |||||||||
| 3Ch | DWORD | offset of new executable (NE,LE,etc) header within disk file, or 00000000h if plain MZ executable | |||||||||
| ---Borland TLINK--- | |||||||||||
| 1Ch | 2 BYTEs | ??? (apparently always 01h 00h) | |||||||||
| 1Eh | BYTE | signature FBh | |||||||||
| 1Fh | BYTE | TLINK version (major in high nybble, minor in low nybble) | |||||||||
| 20h | 2 BYTEs | ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h) | |||||||||
| ---ARJ self-extracting archive--- | |||||||||||
| 1Ch | 4 BYTEs | signature "RJSX" (older versions, new signature is "aRJsfX" in the first 1000 bytes of the file) | |||||||||
| ---LZEXE 0.90 compressed executable--- | |||||||||||
| 1Ch | 4 BYTEs | signature "LZ09" | |||||||||
| ---LZEXE 0.91 compressed executable--- | |||||||||||
| 1Ch | 4 BYTEs | signature "LZ91" | |||||||||
| ---PKLITE compressed executable--- | |||||||||||
| 1Ch | BYTE | minor version number | |||||||||
| 1Dh | BYTE | 
 | |||||||||
| 1Eh | 6 BYTEs | signature "PKLITE" (followed by copyright message) | |||||||||
| ---LHarc 1.x self-extracting archive--- | |||||||||||
| 1Ch | 4 BYTEs | unused??? | |||||||||
| 20h | 3 BYTEs | jump to start of extraction code | |||||||||
| 23h | 2 BYTEs | ??? | |||||||||
| 25h | 12 BYTEs | signature "LHarc's SFX " | |||||||||
| ---LHA 2.x self-extracting archive--- | |||||||||||
| 1Ch | 8 BYTEs | ??? | |||||||||
| 24h | 10 BYTEs | signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13) | |||||||||
| ---TopSpeed C 3.0 CRUNCH compressed file--- | |||||||||||
| 1Ch | DWORD | 018A0001h | |||||||||
| 20h | WORD | 1565h | |||||||||
| ---PKARCK 3.5 self-extracting archive--- | |||||||||||
| 1Ch | DWORD | 00020001h | |||||||||
| 20h | WORD | 0700h | |||||||||
| ---BSA (Soviet archiver) self-extracting archive--- | |||||||||||
| 1Ch | WORD | 000Fh | |||||||||
| 1Eh | BYTE | A7h | |||||||||
| ---LARC self-extracting archive--- | |||||||||||
| 1Ch | 4 BYTEs | ??? | |||||||||
| 20h | 11 BYTEs | "SFX by LARC" | |||||||||
| ---LH self-extracting archive--- | |||||||||||
| 1Ch | 8 BYTEs | ??? | |||||||||
| 24h | 8 BYTEs | "LH's SFX " | |||||||||
| ---RAR self-extracting archive--- | |||||||||||
| 1Ch | 4 BYTEs | signature "RSFX" | |||||||||
| ---other linkers--- | |||||||||||
| 1Ch | var | optional information | |||||||||
| --- | |||||||||||
| N | N DWORDs | relocation items each is the segment:offset from start of load image at which to add the actual load segment to the indicated WORD | |||||||||
| Note: |  If the word at offset 02h is 4, it should be treated as 00h,
since pre-1.10 versions of the MS linker set it that way. | 
| See Also: |