Linear Executable (LX/LE) Format
The Linear Executable format is an executable format used by OS/2, many DOS extenders and Microsoft Windows VxD files. There are two main variants LX (16 bit only) and LE (16/32 bit mixed).
Many DOS games from the late 90s are 32-bit games shipped as LE executable together with a DOS extender. The DOS extender will boot the CPU into 32-bit protected mode, extract the actual game from the game executable, load it into memory and run it. A popular choice at the time was DOS4G(W) that can be found along many games.
A Linear executable features a standard MZ header, with the e_lfanew field at offset 0x3C pointing to an LX/LE header instead of an NE header. The LX/LE headers have a different magic value than the NE header, namely "LX" and "LE".
See the links below for further details on the format.
- Many specifications are old and for the LX variant, which was not used by DOS extenders. There are some slight differences when reading LE file compared to reading LX file, like page map entries being 32bit wide for LE but 64bit wide for LX). Open watcom as linked above is a good source to see those differences
- dos32a is an open source DOS extender which can also help with understanding the LE variant
- Tutorial:Adding more space to Linear Executable DOS Games (Add room for new code, assets and text strings)
- Tutorial:Unbinding Games from DOS extenders with dos32a