The entry table lists the module’s entry points: the places other modules can call or
refer to. It is at the header’s entry table offset (0x5C, from the start of
the LE header). Entry points are numbered by ordinal, from 1, in the order they appear,
and the name tables give names to some of
them.
Bundles
The entries come in bundles of entries of one type, in one object. Each bundle starts:
| Offset | Size | Field | Meaning |
|---|---|---|---|
| 0 | 1 | Count | The number of entries in the bundle; 0 ends the table. |
| 1 | 1 | Type | The type of the entries, below. Bit 7 (0x80) says parameter typing information is present; IBM reserves it for future use. |
| 2 | 2 | Object | The object the entries are in, from 1. Not present for type 0. |
Then come the entries, all of the bundle’s type:
| Type | Entries | Each entry |
|---|---|---|
| 0 | Unused | None: the bundle only skips count ordinals. |
| 1 | 16-bit entry | Flags (1 byte), offset (2 bytes). |
| 2 | 286 call gate | Flags (1), offset (2), call gate selector (2), filled in by the loader. |
| 3 | 32-bit entry | Flags (1), offset (4). |
Type 4, the forwarder, is LX’s; see the LX entry table.
The entry flags: bit 0 (0x01) the entry is exported; bits 3 to 7
(0xF8) the number of parameter words (types 1 and 2) or doublewords
(type 3). The explorer lists the
entry points with their names, objects and offsets, and names them in the code.
Worked example
000001DA 01 03 01 00 03 68 06 00 00 00
One bundle of one entry, type 3 (32-bit), in object 1. The entry has flags
0x03, exported and bit 1 (not explained in the sources checked), and offset 0x00000668. It is ordinal
1, which the non-resident names call _The_DDB: the VxD’s device descriptor
block, at 0x668 in object 1. The final 0 ends the table.