An LX module that uses procedures of other modules names them in two tables at the end of the fixup section. The fixup records that patch the calls, and the forwarders in the entry table, refer to a module by its number in the first table, and to a procedure by its ordinal or by the offset of its name in the second. There is no separate import directory: the imports are the fixups.
Import module names
The import module name table is at the header’s offset 0x70, from the
start of the LX header, and holds as many names as the header’s count
(0x74). Each name is a length byte followed by that many characters, with
no zero at the end, such as DOSCALLS, the module of OS/2’s system calls.
Fixups number the modules from 1, in the order of this table.
Import procedure names
The import procedure name table is at the header’s offset 0x78 and runs
to the end of the fixup section: the fixup page table offset plus the fixup section
size. It is a run of length-prefixed names, like the module names. The high bit of each
length byte is a flag, which IBM’s description reserves for future parameter type
checking, so a length is the low seven bits. Fixups that import by name give the offset
of the name in this table; the first byte is usually an empty name, so that no real
name is at offset 0.
The explorer lists the imports it finds in the fixups, by module and procedure name or ordinal, with the number of places that use each, and labels those places in the code.
Example
A32SBFM.DLL imports nothing. Its header puts both import tables at
+0xBE2, file offset 0xC72, with a count of 0 modules. The
fixup section ends one byte later (+0x108 + 0xADB = +0xBE3), so the import
procedure table is that single byte, 00: the empty name at its start.