[8003] | 1 | /* $Id: LXexe.h,v 1.1 2002-02-24 02:47:22 bird Exp $
|
---|
| 2 | *
|
---|
| 3 | * LX DEFINITIONS AND DECLARATIONS.
|
---|
| 4 | * --------------------------------
|
---|
| 5 | *
|
---|
| 6 | * Copyright (c) IBM Corporation 1987, 1991
|
---|
| 7 | * Copyright (c) Microsoft Corp 1988, 1991
|
---|
| 8 | *
|
---|
| 9 | * And knut st. osmundsen has been messing it up a little...
|
---|
| 10 | *
|
---|
| 11 | */
|
---|
| 12 |
|
---|
| 13 | #if !defined(__EXE386__) && !defined(_LXexe_h_)
|
---|
| 14 | #define _LXexe_h_
|
---|
| 15 |
|
---|
| 16 |
|
---|
| 17 | #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
|
---|
| 18 |
|
---|
| 19 |
|
---|
| 20 | #pragma pack(1) /* Force byte alignment */
|
---|
| 21 |
|
---|
| 22 | /*_________________________________________________________________*
|
---|
| 23 | | |
|
---|
| 24 | | |
|
---|
| 25 | | OS/2 .EXE FILE HEADER DEFINITION - 386 version 0:32 |
|
---|
| 26 | | |
|
---|
| 27 | |_________________________________________________________________|
|
---|
| 28 | * */
|
---|
| 29 |
|
---|
| 30 | /*
|
---|
| 31 | * Misc stuff in the header.
|
---|
| 32 | */
|
---|
| 33 | #define BITPERWORD 16
|
---|
| 34 | #define BITPERBYTE 8
|
---|
| 35 | #define OBJPAGELEN 4096
|
---|
| 36 | #define E32MAGIC1 'L' /* New magic number "LX" */
|
---|
| 37 | #define E32MAGIC2 'X' /* New magic number "LX" */
|
---|
| 38 | #define E32MAGIC 0x584c /* New magic number "LX" */
|
---|
| 39 | #define E32RESBYTES1 0 /* First bytes reserved */
|
---|
| 40 | #define E32RESBYTES2 0 /* Second bytes reserved */
|
---|
| 41 | #define E32RESBYTES3 20 /* Third bytes reserved */
|
---|
| 42 | #define E32LEBO 0x00 /* Little Endian Byte Order */
|
---|
| 43 | #define E32BEBO 0x01 /* Big Endian Byte Order */
|
---|
| 44 | #define E32LEWO 0x00 /* Little Endian Word Order */
|
---|
| 45 | #define E32BEWO 0x01 /* Big Endian Word Order */
|
---|
| 46 | #define E32LEVEL 0L /* 32-bit EXE format level */
|
---|
| 47 | #define E32CPU286 0x001 /* Intel 80286 or upwardly compatibile */
|
---|
| 48 | #define E32CPU386 0x002 /* Intel 80386 or upwardly compatibile */
|
---|
| 49 | #define E32CPU486 0x003 /* Intel 80486 or upwardly compatibile */
|
---|
| 50 |
|
---|
| 51 |
|
---|
| 52 | /**
|
---|
| 53 | * New 32-bit .EXE header for OS/2 version 2.0 and above.
|
---|
| 54 | */
|
---|
| 55 | struct e32_exe
|
---|
| 56 | {
|
---|
| 57 | unsigned char e32_magic[2]; /* Magic number E32_MAGIC */
|
---|
| 58 | unsigned char e32_border; /* The byte ordering for the .EXE */
|
---|
| 59 | unsigned char e32_worder; /* The word ordering for the .EXE */
|
---|
| 60 | unsigned long e32_level; /* The EXE format level for now = 0 */
|
---|
| 61 | unsigned short e32_cpu; /* The CPU type */
|
---|
| 62 | unsigned short e32_os; /* The OS type */
|
---|
| 63 | unsigned long e32_ver; /* Module version */
|
---|
| 64 | unsigned long e32_mflags; /* Module flags */
|
---|
| 65 | unsigned long e32_mpages; /* Module # pages */
|
---|
| 66 | unsigned long e32_startobj; /* Object # for instruction pointer */
|
---|
| 67 | unsigned long e32_eip; /* Extended instruction pointer */
|
---|
| 68 | unsigned long e32_stackobj; /* Object # for stack pointer */
|
---|
| 69 | unsigned long e32_esp; /* Extended stack pointer */
|
---|
| 70 | unsigned long e32_pagesize; /* .EXE page size */
|
---|
| 71 | unsigned long e32_pageshift; /* Page alignment shift in .EXE */
|
---|
| 72 | unsigned long e32_fixupsize; /* Fixup section size */
|
---|
| 73 | unsigned long e32_fixupsum; /* Fixup section checksum */
|
---|
| 74 | unsigned long e32_ldrsize; /* Loader section size */
|
---|
| 75 | unsigned long e32_ldrsum; /* Loader section checksum */
|
---|
| 76 | unsigned long e32_objtab; /* Object table offset */
|
---|
| 77 | unsigned long e32_objcnt; /* Number of objects in module */
|
---|
| 78 | unsigned long e32_objmap; /* Object page map offset */
|
---|
| 79 | unsigned long e32_itermap; /* Object iterated data map offset */
|
---|
| 80 | unsigned long e32_rsrctab; /* Offset of Resource Table */
|
---|
| 81 | unsigned long e32_rsrccnt; /* Number of resource entries */
|
---|
| 82 | unsigned long e32_restab; /* Offset of resident name table */
|
---|
| 83 | unsigned long e32_enttab; /* Offset of Entry Table */
|
---|
| 84 | unsigned long e32_dirtab; /* Offset of Module Directive Table */
|
---|
| 85 | unsigned long e32_dircnt; /* Number of module directives */
|
---|
| 86 | unsigned long e32_fpagetab; /* Offset of Fixup Page Table */
|
---|
| 87 | unsigned long e32_frectab; /* Offset of Fixup Record Table */
|
---|
| 88 | unsigned long e32_impmod; /* Offset of Import Module Name Table */
|
---|
| 89 | unsigned long e32_impmodcnt; /* Number of entries in Import Module Name Table */
|
---|
| 90 | unsigned long e32_impproc; /* Offset of Import Procedure Name Table */
|
---|
| 91 | unsigned long e32_pagesum; /* Offset of Per-Page Checksum Table */
|
---|
| 92 | unsigned long e32_datapage; /* Offset of Enumerated Data Pages */
|
---|
| 93 | unsigned long e32_preload; /* Number of preload pages */
|
---|
| 94 | unsigned long e32_nrestab; /* Offset of Non-resident Names Table */
|
---|
| 95 | unsigned long e32_cbnrestab; /* Size of Non-resident Name Table */
|
---|
| 96 | unsigned long e32_nressum; /* Non-resident Name Table Checksum */
|
---|
| 97 | unsigned long e32_autodata; /* Object # for automatic data object */
|
---|
| 98 | unsigned long e32_debuginfo; /* Offset of the debugging information */
|
---|
| 99 | unsigned long e32_debuglen; /* The length of the debugging info. in bytes */
|
---|
| 100 | unsigned long e32_instpreload;/* Number of instance pages in preload section of .EXE file */
|
---|
| 101 | unsigned long e32_instdemand; /* Number of instance pages in demand load section of .EXE file */
|
---|
| 102 | unsigned long e32_heapsize; /* Size of heap - for 16-bit apps */
|
---|
| 103 | unsigned long e32_stacksize; /* Size of stack */
|
---|
| 104 | unsigned char e32_res3[E32RESBYTES3];
|
---|
| 105 | /* Pad structure to 196 bytes */
|
---|
| 106 | };
|
---|
| 107 |
|
---|
| 108 | /*
|
---|
| 109 | * Format of E32_MFLAGS(x):
|
---|
| 110 | *
|
---|
| 111 | * Low word has the following format:
|
---|
| 112 | *
|
---|
| 113 | * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
|
---|
| 114 | * | | | | | | | |
|
---|
| 115 | * | | | | | | | +------- Per-Process Library Initialization
|
---|
| 116 | * | | | | | | +--------- SystemDLL (internal fixups discarded)
|
---|
| 117 | * | | | | | +----------- No Internal Fixups for Module in .EXE
|
---|
| 118 | * | | | | +------------- No External Fixups for Module in .EXE
|
---|
| 119 | * | | | +------------------- Incompatible with PM Windowing
|
---|
| 120 | * | | +--------------------- Compatible with PM Windowing
|
---|
| 121 | * | | Uses PM Windowing API
|
---|
| 122 | * | +-------------------------------- Module not Loadable
|
---|
| 123 | * +-------------------------------------- Library Module
|
---|
| 124 | */
|
---|
| 125 | #define E32NOTP 0x8000L /* Library Module - used as NENOTP */
|
---|
| 126 | #define E32NOLOAD 0x2000L /* Module not Loadable */
|
---|
| 127 | #define E32PMAPI 0x0300L /* Uses PM Windowing API */
|
---|
| 128 | #define E32PMW 0x0200L /* Compatible with PM Windowing */
|
---|
| 129 | #define E32NOPMW 0x0100L /* Incompatible with PM Windowing */
|
---|
| 130 | #define E32NOEXTFIX 0x0020L /* NO External Fixups in .EXE */
|
---|
| 131 | #define E32NOINTFIX 0x0010L /* NO Internal Fixups in .EXE */
|
---|
| 132 | #define E32SYSDLL 0x0008L /* System DLL, Internal Fixups discarded*/
|
---|
| 133 | #define E32LIBINIT 0x0004L /* Per-Process Library Initialization */
|
---|
| 134 | #define E32LIBTERM 0x40000000L /* Per-Process Library Termination */
|
---|
| 135 | #define E32APPMASK 0x0300L /* Application Type Mask */
|
---|
| 136 |
|
---|
| 137 | /*
|
---|
| 138 | * Format of E32_MFLAGS(x):
|
---|
| 139 | *
|
---|
| 140 | * High word has the following format:
|
---|
| 141 | *
|
---|
| 142 | * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
|
---|
| 143 | * | |
|
---|
| 144 | * | +--- Protected memory library module
|
---|
| 145 | * +----- Device driver
|
---|
| 146 | */
|
---|
| 147 | #define E32PROTDLL 0x10000L /* Protected memory library module */
|
---|
| 148 | #define E32DEVICE 0x20000L /* Device driver */
|
---|
| 149 | #define E32MODEXE 0x00000L /* .EXE module */
|
---|
| 150 | #define E32MODDLL 0x08000L /* .DLL module */
|
---|
| 151 | #define E32MODPROTDLL 0x18000L /* Protected memory library module */
|
---|
| 152 | #define E32MODPDEV 0x20000L /* Physical device driver */
|
---|
| 153 | #define E32MODVDEV 0x28000L /* Virtual device driver */
|
---|
| 154 | #define E32MODMASK 0x38000L /* Module type mask */
|
---|
| 155 | #define E32NOTMPSAFE 0x80000L /* Process is multi-processor unsafe */
|
---|
| 156 |
|
---|
| 157 |
|
---|
| 158 |
|
---|
| 159 | /*
|
---|
| 160 | * RELOCATION DEFINITIONS - RUN-TIME FIXUPS
|
---|
| 161 | */
|
---|
| 162 |
|
---|
| 163 | typedef union _offset
|
---|
| 164 | {
|
---|
| 165 | unsigned short offset16;
|
---|
| 166 | unsigned long offset32;
|
---|
| 167 | } offset; /* 16-bit or 32-bit offset */
|
---|
| 168 |
|
---|
| 169 | /***ET+ r32_rlc - Relocation item */
|
---|
| 170 | struct r32_rlc /* Relocation item */
|
---|
| 171 | {
|
---|
| 172 | unsigned char nr_stype; /* Source type - field shared with new_rlc */
|
---|
| 173 | unsigned char nr_flags; /* Flag byte - field shared with new_rlc */
|
---|
| 174 | short r32_soff; /* Source offset */
|
---|
| 175 | unsigned short r32_objmod; /* Target object number or Module ordinal */
|
---|
| 176 |
|
---|
| 177 | union targetid
|
---|
| 178 | {
|
---|
| 179 | offset intref; /* Internal fixup */
|
---|
| 180 | union extfixup
|
---|
| 181 | {
|
---|
| 182 | offset proc; /* Procedure name offset */
|
---|
| 183 | unsigned long ord; /* Procedure odrinal */
|
---|
| 184 | } extref; /* External fixup */
|
---|
| 185 | struct addfixup
|
---|
| 186 | {
|
---|
| 187 | unsigned short entry; /* Entry ordinal */
|
---|
| 188 | offset addval; /* Value added to the address */
|
---|
| 189 | } addfix; /* Additive fixup */
|
---|
| 190 | } r32_target; /* Target data */
|
---|
| 191 |
|
---|
| 192 | unsigned short r32_srccount; /* Number of chained fixup records */
|
---|
| 193 | unsigned short r32_chain; /* Chain head */
|
---|
| 194 | };
|
---|
| 195 |
|
---|
| 196 | /*
|
---|
| 197 | * In 32-bit .EXE file run-time relocations are written as varying size
|
---|
| 198 | * records, so we need many size definitions.
|
---|
| 199 | */
|
---|
| 200 | #define RINTSIZE16 8
|
---|
| 201 | #define RINTSIZE32 10
|
---|
| 202 | #define RORDSIZE 8
|
---|
| 203 | #define RNAMSIZE16 8
|
---|
| 204 | #define RNAMSIZE32 10
|
---|
| 205 | #define RADDSIZE16 10
|
---|
| 206 | #define RADDSIZE32 12
|
---|
| 207 |
|
---|
| 208 | /*
|
---|
| 209 | * Format of NR_STYPE(x)
|
---|
| 210 | *
|
---|
| 211 | * 7 6 5 4 3 2 1 0 - bit no
|
---|
| 212 | * | | | | | |
|
---|
| 213 | * | | +-+-+-+--- Source type
|
---|
| 214 | * | +----------- Fixup to 16:16 alias
|
---|
| 215 | * +------------- List of source offset follows fixup record
|
---|
| 216 | */
|
---|
| 217 |
|
---|
| 218 | #define NRSTYP 0x0f /* Source type mask */
|
---|
| 219 | #define NRSBYT 0x00 /* lo byte (8-bits)*/
|
---|
| 220 | #define NRSSEG 0x02 /* 16-bit segment (16-bits) */
|
---|
| 221 | #define NRSPTR 0x03 /* 16:16 pointer (32-bits) */
|
---|
| 222 | #define NRSOFF 0x05 /* 16-bit offset (16-bits) */
|
---|
| 223 | #define NRPTR48 0x06 /* 16:32 pointer (48-bits) */
|
---|
| 224 | #define NROFF32 0x07 /* 32-bit offset (32-bits) */
|
---|
| 225 | #define NRSOFF32 0x08 /* 32-bit self-relative offset (32-bits) */
|
---|
| 226 | #define NRSRCMASK 0x0f /* Source type mask */
|
---|
| 227 | #define NRALIAS 0x10 /* Fixup to alias */
|
---|
| 228 | #define NRCHAIN 0x20 /* List of source offset follows */
|
---|
| 229 | /* fixup record, source offset field */
|
---|
| 230 | /* in fixup record contains number */
|
---|
| 231 | /* of elements in list */
|
---|
| 232 | /*
|
---|
| 233 | * Format of NR_FLAGS(x) and R32_FLAGS(x):
|
---|
| 234 | *
|
---|
| 235 | * 7 6 5 4 3 2 1 0 - bit no
|
---|
| 236 | * | | | | | | |
|
---|
| 237 | * | | | | | +-+--- Reference type
|
---|
| 238 | * | | | | +------- Additive fixup
|
---|
| 239 | * | | | +----------- 32-bit Target Offset Flag (1 - 32-bit; 0 - 16-bit)
|
---|
| 240 | * | | +------------- 32-bit Additive Flag (1 - 32-bit; 0 - 16-bit)
|
---|
| 241 | * | +--------------- 16-bit Object/Module ordinal (1 - 16-bit; 0 - 8-bit)
|
---|
| 242 | * +----------------- 8-bit import ordinal (1 - 8-bit;
|
---|
| 243 | * 0 - NR32BITOFF toggles
|
---|
| 244 | * between 16 and 32 bit
|
---|
| 245 | * ordinal)
|
---|
| 246 | */
|
---|
| 247 | #define NRRTYP 0x03 /* Reference type mask */
|
---|
| 248 | #define NRRINT 0x00 /* Internal reference */
|
---|
| 249 | #define NRRORD 0x01 /* Import by ordinal */
|
---|
| 250 | #define NRRNAM 0x02 /* Import by name */
|
---|
| 251 | #define NRADD 0x04 /* Additive fixup */
|
---|
| 252 | #define NRICHAIN 0x08 /* Internal Chaining Fixup */
|
---|
| 253 | #define NRRENT 0x03 /* Internal entry table fixup */
|
---|
| 254 | #define NR32BITOFF 0x10 /* 32-bit Target Offset */
|
---|
| 255 | #define NR32BITADD 0x20 /* 32-bit Additive fixup */
|
---|
| 256 | #define NR16OBJMOD 0x40 /* 16-bit Object/Module ordinal */
|
---|
| 257 | #define NR8BITORD 0x80 /* 8-bit import ordinal */
|
---|
| 258 |
|
---|
| 259 | /*
|
---|
| 260 | * Data structures for storing run-time fixups in linker virtual memory.
|
---|
| 261 | *
|
---|
| 262 | * Each object has a list of Object Page Directories which specify
|
---|
| 263 | * fixups for given page. Each page has its own hash table which is
|
---|
| 264 | * used to detect fixups to the same target.
|
---|
| 265 | */
|
---|
| 266 | #define PAGEPERDIR 62
|
---|
| 267 | #define LG2DIR 7
|
---|
| 268 | typedef struct _OBJPAGEDIR
|
---|
| 269 | {
|
---|
| 270 | unsigned long next; /* Virtual pointer to next dir on list */
|
---|
| 271 | unsigned short ht[PAGEPERDIR]; /* Pointers to individual hash tables */
|
---|
| 272 | } OBJPAGEDIR;
|
---|
| 273 |
|
---|
| 274 |
|
---|
| 275 |
|
---|
| 276 | /*
|
---|
| 277 | * OBJECT TABLE
|
---|
| 278 | */
|
---|
| 279 |
|
---|
| 280 | /***ET+ o32_obj Object Table Entry */
|
---|
| 281 | struct o32_obj /* Flat .EXE object table entry */
|
---|
| 282 | {
|
---|
| 283 | unsigned long o32_size; /* Object virtual size */
|
---|
| 284 | unsigned long o32_base; /* Object base virtual address */
|
---|
| 285 | unsigned long o32_flags; /* Attribute flags */
|
---|
| 286 | unsigned long o32_pagemap; /* Object page map index */
|
---|
| 287 | unsigned long o32_mapsize; /* Number of entries in object page map */
|
---|
| 288 | unsigned long o32_reserved; /* Reserved */
|
---|
| 289 | };
|
---|
| 290 |
|
---|
| 291 | /*
|
---|
| 292 | * Format of O32_FLAGS(x)
|
---|
| 293 | *
|
---|
| 294 | * High word of dword flag field is not used for now.
|
---|
| 295 | * Low word has the following format:
|
---|
| 296 | *
|
---|
| 297 | * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
|
---|
| 298 | * | | | | | | | | | | | | | | |
|
---|
| 299 | * | | | | | | | | | | | | | | +--- Readable Object
|
---|
| 300 | * | | | | | | | | | | | | | +----- Writeable Object
|
---|
| 301 | * | | | | | | | | | | | | +------- Executable Object
|
---|
| 302 | * | | | | | | | | | | | +--------- Resource Object
|
---|
| 303 | * | | | | | | | | | | +----------- Object is Discardable
|
---|
| 304 | * | | | | | | | | | +------------- Object is Shared
|
---|
| 305 | * | | | | | | | | +--------------- Object has preload pages
|
---|
| 306 | * | | | | | | | +----------------- Object has invalid pages
|
---|
| 307 | * | | | | | | +------------------- Object is permanent and swappable
|
---|
| 308 | * | | | | | +--------------------- Object is permanent and resident
|
---|
| 309 | * | | | | +----------------------- Object is permanent and long lockable
|
---|
| 310 | * | | | +----------------------------- 16:16 alias required (80x86 specific)
|
---|
| 311 | * | | +-------------------------------- Big/Default bit setting (80x86 specific)
|
---|
| 312 | * | +----------------------------------- Object is conforming for code (80x86 specific)
|
---|
| 313 | * +-------------------------------------- Object I/O privilege level (80x86 specific)
|
---|
| 314 | *
|
---|
| 315 | */
|
---|
| 316 | #define OBJREAD 0x0001L /* Readable Object */
|
---|
| 317 | #define OBJWRITE 0x0002L /* Writeable Object */
|
---|
| 318 | #define OBJRSRC 0x0008L /* Resource Object */
|
---|
| 319 | #define OBJINVALID 0x0080L /* Object has invalid pages */
|
---|
| 320 | #define LNKNONPERM 0x0600L /* Object is nonpermanent - should be */
|
---|
| 321 | #define OBJNONPERM 0x0000L /* zero in the .EXE but LINK386 uses 6 */
|
---|
| 322 | #define OBJPERM 0x0100L /* Object is permanent and swappable */
|
---|
| 323 | #define OBJRESIDENT 0x0200L /* Object is permanent and resident */
|
---|
| 324 | #define OBJCONTIG 0x0300L /* Object is resident and contiguous */
|
---|
| 325 | #define OBJDYNAMIC 0x0400L /* Object is permanent and long locable */
|
---|
| 326 | #define OBJTYPEMASK 0x0700L /* Object type mask */
|
---|
| 327 | #define OBJALIAS16 0x1000L /* 16:16 alias required (80x86 specific) */
|
---|
| 328 | #define OBJBIGDEF 0x2000L /* Big/Default bit setting (80x86 specific) */
|
---|
| 329 | #define OBJIOPL 0x8000L /* Object I/O privilege level (80x86 specific) */
|
---|
| 330 |
|
---|
| 331 | /*
|
---|
| 332 | * Name these flags differently for EXEHDR.EXE - avoid conflicts with 286 version
|
---|
| 333 | */
|
---|
| 334 | #define OBJDISCARD 0x0010L /* Object is Discardable */
|
---|
| 335 | #define OBJSHARED 0x0020L /* Object is Shared */
|
---|
| 336 | #define OBJPRELOAD 0x0040L /* Object has preload pages */
|
---|
| 337 | #define OBJEXEC 0x0004L /* Executable Object */
|
---|
| 338 | #define OBJCONFORM 0x4000L /* Object is conforming for code (80x86 specific) */
|
---|
| 339 |
|
---|
| 340 | /***ET+ o32_map - Object Page Map entry */
|
---|
| 341 | struct o32_map /* Object Page Table entry */
|
---|
| 342 | {
|
---|
| 343 | unsigned long o32_pagedataoffset; /* file offset of page */
|
---|
| 344 | unsigned short o32_pagesize; /* # bytes of page data */
|
---|
| 345 | unsigned short o32_pageflags; /* Per-Page attributes */
|
---|
| 346 | };
|
---|
| 347 |
|
---|
| 348 | /*
|
---|
| 349 | * Page flags
|
---|
| 350 | */
|
---|
| 351 | #define VALID 0x0000 /* Valid Physical Page in .EXE */
|
---|
| 352 | #define ITERDATA 0x0001 /* Iterated Data Page */
|
---|
| 353 | #define INVALID 0x0002 /* Invalid Page */
|
---|
| 354 | #define ZEROED 0x0003 /* Zero Filled Page */
|
---|
| 355 | #define RANGE 0x0004 /* Range of pages */
|
---|
| 356 | #define ITERDATA2 0x0005 /* Iterated Data Page Type II */
|
---|
| 357 |
|
---|
| 358 |
|
---|
| 359 |
|
---|
| 360 | /*
|
---|
| 361 | * RESOURCE TABLE
|
---|
| 362 | */
|
---|
| 363 |
|
---|
| 364 | /***ET+ rsrc32 - Resource Table Entry */
|
---|
| 365 | struct rsrc32 /* Resource Table Entry */
|
---|
| 366 | {
|
---|
| 367 | unsigned short type; /* Resource type */
|
---|
| 368 | unsigned short name; /* Resource name */
|
---|
| 369 | unsigned long cb; /* Resource size */
|
---|
| 370 | unsigned short obj; /* Object number */
|
---|
| 371 | unsigned long offset; /* Offset within object */
|
---|
| 372 | };
|
---|
| 373 |
|
---|
| 374 | /*
|
---|
| 375 | * Iteration Record format for 'EXEPACK'ed pages.
|
---|
| 376 | */
|
---|
| 377 | struct LX_Iter
|
---|
| 378 | {
|
---|
| 379 | unsigned short LX_nIter; /* number of iterations */
|
---|
| 380 | unsigned short LX_nBytes; /* number of bytes */
|
---|
| 381 | unsigned char LX_Iterdata; /* iterated data byte(s) */
|
---|
| 382 | };
|
---|
| 383 |
|
---|
| 384 |
|
---|
| 385 |
|
---|
| 386 | /*
|
---|
| 387 | * ENTRY TABLE DEFINITIONS
|
---|
| 388 | */
|
---|
| 389 |
|
---|
| 390 | /***ET+ b32_bundle - Entry Table */
|
---|
| 391 | struct b32_bundle
|
---|
| 392 | {
|
---|
| 393 | unsigned char b32_cnt; /* Number of entries in this bundle */
|
---|
| 394 | unsigned char b32_type; /* Bundle type */
|
---|
| 395 | unsigned short b32_obj; /* Object number */
|
---|
| 396 | }; /* Follows entry types */
|
---|
| 397 |
|
---|
| 398 | /*
|
---|
| 399 | * Bundle types.
|
---|
| 400 | */
|
---|
| 401 | #define EMPTY 0x00 /* Empty bundle */
|
---|
| 402 | #define ENTRY16 0x01 /* 16-bit offset entry point */
|
---|
| 403 | #define GATE16 0x02 /* 286 call gate (16-bit IOPL) */
|
---|
| 404 | #define ENTRY32 0x03 /* 32-bit offset entry point */
|
---|
| 405 | #define ENTRYFWD 0x04 /* Forwarder entry point */
|
---|
| 406 | #define TYPEINFO 0x80 /* Typing information present flag */
|
---|
| 407 |
|
---|
| 408 | struct e32_entry
|
---|
| 409 | {
|
---|
| 410 | unsigned char e32_flags; /* Entry point flags */
|
---|
| 411 | union entrykind
|
---|
| 412 | {
|
---|
| 413 | offset e32_offset; /* 16-bit/32-bit offset entry */
|
---|
| 414 | struct callgate
|
---|
| 415 | {
|
---|
| 416 | unsigned short offset; /* Offset in segment */
|
---|
| 417 | unsigned short callgate; /* Callgate selector */
|
---|
| 418 | } e32_callgate; /* 286 (16-bit) call gate */
|
---|
| 419 | struct fwd
|
---|
| 420 | {
|
---|
| 421 | unsigned short modord; /* Module ordinal number */
|
---|
| 422 | unsigned long value; /* Proc name offset or ordinal */
|
---|
| 423 | } e32_fwd; /* Forwarder */
|
---|
| 424 | } e32_variant; /* Entry variant */
|
---|
| 425 | };
|
---|
| 426 |
|
---|
| 427 | /*
|
---|
| 428 | * Entry flags.
|
---|
| 429 | */
|
---|
| 430 | #define FIXENT16 3
|
---|
| 431 | #define FIXENT32 5
|
---|
| 432 | #define GATEENT16 5
|
---|
| 433 | #define FWDENT 7
|
---|
| 434 |
|
---|
| 435 | /*
|
---|
| 436 | * Format for E32_EFLAGS(x)
|
---|
| 437 | *
|
---|
| 438 | * 7 6 5 4 3 2 1 0 - bit no
|
---|
| 439 | * | | | | | | | |
|
---|
| 440 | * | | | | | | | +--- exported entry
|
---|
| 441 | * | | | | | | +----- uses shared data
|
---|
| 442 | * +-+-+-+-+-+------- parameter word count
|
---|
| 443 | */
|
---|
| 444 | #define E32EXPORT 0x01 /* Exported entry */
|
---|
| 445 | #define E32SHARED 0x02 /* Uses shared data */
|
---|
| 446 | #define E32PARAMS 0xf8 /* Parameter word count mask */
|
---|
| 447 |
|
---|
| 448 | /*
|
---|
| 449 | * Flags for forwarders only:
|
---|
| 450 | */
|
---|
| 451 | #define FWD_ORDINAL 0x01 /* Imported by ordinal */
|
---|
| 452 |
|
---|
| 453 |
|
---|
| 454 | #pragma pack() /* Restore default alignment */
|
---|
| 455 |
|
---|
| 456 |
|
---|
| 457 | #endif
|
---|