summaryrefslogtreecommitdiffstats
path: root/private/os2/ldr/newexe.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/os2/ldr/newexe.h
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/os2/ldr/newexe.h')
-rw-r--r--private/os2/ldr/newexe.h464
1 files changed, 464 insertions, 0 deletions
diff --git a/private/os2/ldr/newexe.h b/private/os2/ldr/newexe.h
new file mode 100644
index 000000000..305db12fd
--- /dev/null
+++ b/private/os2/ldr/newexe.h
@@ -0,0 +1,464 @@
+/*static char *SCCSID = "@(#)newexe.h 6.2 91/02/12";*/
+/*
+ * SCCSID = @(#)newexe.h 6.2 91/02/12
+ *
+ * Title
+ *
+ * newexe.h
+ * (C) Copyright Microsoft Corp 1984-1987
+ *
+ * Description
+ *
+ * Data structure definitions for the DOS 4.0/Windows 2.0
+ * executable file format.
+ *
+ */
+
+
+
+ /*_________________________________________________________________*
+ | |
+ | |
+ | DOS3 .EXE FILE HEADER DEFINITION |
+ | |
+ |_________________________________________________________________|
+ * */
+
+
+#define EMAGIC 0x5A4D /* Old magic number */
+#define ENEWEXE sizeof(struct exe_hdr)
+ /* Value of E_LFARLC for new .EXEs */
+#define ENEWHDR 0x003C /* Offset in old hdr. of ptr. to new */
+#define ERESWDS 0x0010 /* No. of reserved words (OLD) */
+#define ERES1WDS 0x0004 /* No. of reserved words in e_res */
+#define ERES2WDS 0x000A /* No. of reserved words in e_res2 */
+#define ECP 0x0004 /* Offset in struct of E_CP */
+#define ECBLP 0x0002 /* Offset in struct of E_CBLP */
+#define EMINALLOC 0x000A /* Offset in struct of E_MINALLOC */
+
+struct exe_hdr /* DOS 1, 2, 3 .EXE header */
+ {
+ unsigned short e_magic; /* Magic number */
+ unsigned short e_cblp; /* Bytes on last page of file */
+ unsigned short e_cp; /* Pages in file */
+ unsigned short e_crlc; /* Relocations */
+ unsigned short e_cparhdr; /* Size of header in paragraphs */
+ unsigned short e_minalloc; /* Minimum extra paragraphs needed */
+ unsigned short e_maxalloc; /* Maximum extra paragraphs needed */
+ unsigned short e_ss; /* Initial (relative) SS value */
+ unsigned short e_sp; /* Initial SP value */
+ unsigned short e_csum; /* Checksum */
+ unsigned short e_ip; /* Initial IP value */
+ unsigned short e_cs; /* Initial (relative) CS value */
+ unsigned short e_lfarlc; /* File address of relocation table */
+ unsigned short e_ovno; /* Overlay number */
+ unsigned short e_res[ERES1WDS];/* Reserved words */
+ unsigned short e_oemid; /* OEM identifier (for e_oeminfo) */
+ unsigned short e_oeminfo; /* OEM information; e_oemid specific */
+ unsigned short e_res2[ERES2WDS];/* Reserved words */
+ long e_lfanew; /* File address of new exe header */
+ };
+
+#define E_MAGIC(x) (x).e_magic
+#define E_CBLP(x) (x).e_cblp
+#define E_CP(x) (x).e_cp
+#define E_CRLC(x) (x).e_crlc
+#define E_CPARHDR(x) (x).e_cparhdr
+#define E_MINALLOC(x) (x).e_minalloc
+#define E_MAXALLOC(x) (x).e_maxalloc
+#define E_SS(x) (x).e_ss
+#define E_SP(x) (x).e_sp
+#define E_CSUM(x) (x).e_csum
+#define E_IP(x) (x).e_ip
+#define E_CS(x) (x).e_cs
+#define E_LFARLC(x) (x).e_lfarlc
+#define E_OVNO(x) (x).e_ovno
+#define E_RES(x) (x).e_res
+#define E_OEMID(x) (x).e_oemid
+#define E_OEMINFO(x) (x).e_oeminfo
+#define E_RES2(x) (x).e_res2
+#define E_LFANEW(x) (x).e_lfanew
+
+
+ /*_________________________________________________________________*
+ | |
+ | |
+ | OS/2 & WINDOWS .EXE FILE HEADER DEFINITION - 286 version |
+ | |
+ |_________________________________________________________________|
+ * */
+
+#define NEMAGIC 0x454E /* New magic number */
+#define NERESBYTES 8 /* Eight bytes reserved (now) */
+#define NECRC 8 /* Offset into new header of NE_CRC */
+
+struct new_exe /* New .EXE header */
+ {
+ unsigned short ne_magic; /* Magic number NE_MAGIC */
+ unsigned char ne_ver; /* Version number */
+ unsigned char ne_rev; /* Revision number */
+ unsigned short ne_enttab; /* Offset of Entry Table */
+ unsigned short ne_cbenttab; /* Number of bytes in Entry Table */
+ long ne_crc; /* Checksum of whole file */
+ unsigned short ne_flags; /* Flag word */
+ unsigned short ne_autodata; /* Automatic data segment number */
+ unsigned short ne_heap; /* Initial heap allocation */
+ unsigned short ne_stack; /* Initial stack allocation */
+ long ne_csip; /* Initial CS:IP setting */
+ long ne_sssp; /* Initial SS:SP setting */
+ unsigned short ne_cseg; /* Count of file segments */
+ unsigned short ne_cmod; /* Entries in Module Reference Table */
+ unsigned short ne_cbnrestab; /* Size of non-resident name table */
+ unsigned short ne_segtab; /* Offset of Segment Table */
+ unsigned short ne_rsrctab; /* Offset of Resource Table */
+ unsigned short ne_restab; /* Offset of resident name table */
+ unsigned short ne_modtab; /* Offset of Module Reference Table */
+ unsigned short ne_imptab; /* Offset of Imported Names Table */
+ long ne_nrestab; /* Offset of Non-resident Names Table */
+ unsigned short ne_cmovent; /* Count of movable entries */
+ unsigned short ne_align; /* Segment alignment shift count */
+ unsigned short ne_cres; /* Count of resource entries */
+ unsigned char ne_exetyp; /* Target operating system */
+ unsigned char ne_flagsothers; /* Other .EXE flags */
+ char ne_res[NERESBYTES];
+ /* Pad structure to 64 bytes */
+ };
+
+#define NE_MAGIC(x) (x).ne_magic
+#define NE_VER(x) (x).ne_ver
+#define NE_REV(x) (x).ne_rev
+#define NE_ENTTAB(x) (x).ne_enttab
+#define NE_CBENTTAB(x) (x).ne_cbenttab
+#define NE_CRC(x) (x).ne_crc
+#define NE_FLAGS(x) (x).ne_flags
+#define NE_AUTODATA(x) (x).ne_autodata
+#define NE_HEAP(x) (x).ne_heap
+#define NE_STACK(x) (x).ne_stack
+#define NE_CSIP(x) (x).ne_csip
+#define NE_SSSP(x) (x).ne_sssp
+#define NE_CSEG(x) (x).ne_cseg
+#define NE_CMOD(x) (x).ne_cmod
+#define NE_CBNRESTAB(x) (x).ne_cbnrestab
+#define NE_SEGTAB(x) (x).ne_segtab
+#define NE_RSRCTAB(x) (x).ne_rsrctab
+#define NE_RESTAB(x) (x).ne_restab
+#define NE_MODTAB(x) (x).ne_modtab
+#define NE_IMPTAB(x) (x).ne_imptab
+#define NE_NRESTAB(x) (x).ne_nrestab
+#define NE_CMOVENT(x) (x).ne_cmovent
+#define NE_ALIGN(x) (x).ne_align
+#define NE_CRES(x) (x).ne_cres
+#define NE_RES(x) (x).ne_res
+#define NE_EXETYP(x) (x).ne_exetyp
+#define NE_FLAGSOTHERS(x) (x).ne_flagsothers
+
+#define NE_USAGE(x) (WORD)*((WORD *)(x)+1)
+#define NE_PNEXTEXE(x) (WORD)(x).ne_cbenttab
+#define NE_ONEWEXE(x) (WORD)(x).ne_crc
+#define NE_PFILEINFO(x) (WORD)((DWORD)(x).ne_crc >> 16)
+
+
+/*
+ * Target operating systems
+ */
+
+#define NE_UNKNOWN 0x0 /* Unknown (any "new-format" OS) */
+#define NE_OS2 0x1 /* Microsoft/IBM OS/2 (default) */
+#define NE_WINDOWS 0x2 /* Microsoft Windows */
+#define NE_DOS4 0x3 /* Microsoft MS-DOS 4.x */
+#define NE_DEV386 0x4 /* Microsoft Windows 386 */
+
+
+/*
+ * Format of NE_FLAGS(x):
+ *
+ * p Not-a-process
+ * x Unused
+ * e Errors in image
+ * x Unused
+ * b Bound Family/API
+ * ttt Application type
+ * f Floating-point instructions
+ * 3 386 instructions
+ * 2 286 instructions
+ * 0 8086 instructions
+ * P Protected mode only
+ * p Per-process library initialization
+ * i Instance data
+ * s Solo data
+ */
+#define NENOTP 0x8000 /* Not a process */
+#if PMNT
+#define NEPMSHELL 0x4000 /* PM Shell */
+#define NEPMMSGQUE 0x1000 /* calls WinCreateMsgQueue */
+#endif
+#define NEIERR 0x2000 /* Errors in image */
+#define NEBOUND 0x0800 /* Bound Family/API */
+#define NEAPPTYP 0x0700 /* Application type mask */
+#define NENOTWINCOMPAT 0x0100 /* Not compatible with P.M. Windowing */
+#define NEWINCOMPAT 0x0200 /* Compatible with P.M. Windowing */
+#define NEWINAPI 0x0300 /* Uses P.M. Windowing API */
+#define NEFLTP 0x0080 /* Floating-point instructions */
+#define NEI386 0x0040 /* 386 instructions */
+#define NEI286 0x0020 /* 286 instructions */
+#define NEI086 0x0010 /* 8086 instructions */
+#define NEPROT 0x0008 /* Runs in protected mode only */
+#define NEPPLI 0x0004 /* Per-Process Library Initialization */
+#define NEINST 0x0002 /* Instance data */
+#define NESOLO 0x0001 /* Solo data */
+
+/*
+ * Format of NE_FLAGSOTHERS(x):
+ *
+ * 7 6 5 4 3 2 1 0 - bit no
+ * |
+ * +---------------- Support for long file names
+ *
+ */
+
+#define NELONGNAMES 0x01
+
+
+
+struct new_seg /* New .EXE segment table entry */
+ {
+ unsigned short ns_sector; /* File sector of start of segment */
+ unsigned short ns_cbseg; /* Number of bytes in file */
+ unsigned short ns_flags; /* Attribute flags */
+ unsigned short ns_minalloc; /* Minimum allocation in bytes */
+ };
+
+#define NS_SECTOR(x) (x).ns_sector
+#define NS_CBSEG(x) (x).ns_cbseg
+#define NS_FLAGS(x) (x).ns_flags
+#define NS_MINALLOC(x) (x).ns_minalloc
+
+
+/*
+ * Format of NS_FLAGS(x)
+ *
+ * Flag word has the following format:
+ *
+ * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | +-+-+--- Segment type DATA/CODE
+ * | | | | | | | | | | | +--------- Iterated segment
+ * | | | | | | | | | | +----------- Movable segment
+ * | | | | | | | | | +------------- Segment can be shared
+ * | | | | | | | | +--------------- Preload segment
+ * | | | | | | | +----------------- Execute/read-only for code/data segment
+ * | | | | | | +------------------- Segment has relocations
+ * | | | | | +--------------------- Code conforming/Data is expand down
+ * | | | +--+----------------------- I/O privilege level
+ * | | +----------------------------- Discardable segment
+ * | +-------------------------------- 32-bit code segment
+ * +----------------------------------- Huge segment/GDT allocation requested
+ *
+ */
+
+#define NSTYPE 0x0007 /* Segment type mask */
+
+#if (EXE386 == 0)
+#define NSCODE 0x0000 /* Code segment */
+#define NSDATA 0x0001 /* Data segment */
+#define NSITER 0x0008 /* Iterated segment flag */
+#define NSMOVE 0x0010 /* Movable segment flag */
+#define NSSHARED 0x0020 /* Shared segment flag */
+#define NSPRELOAD 0x0040 /* Preload segment flag */
+#define NSEXRD 0x0080 /* Execute-only (code segment), or
+ * read-only (data segment)
+ */
+#define NSRELOC 0x0100 /* Segment has relocations */
+#define NSCONFORM 0x0200 /* Conforming segment */
+#define NSEXPDOWN 0x0200 /* Data segment is expand down */
+#define NSDPL 0x0C00 /* I/O privilege level (286 DPL bits) */
+#define SHIFTDPL 10 /* Left shift count for SEGDPL field */
+#define NSDISCARD 0x1000 /* Segment is discardable */
+#define NS32BIT 0x2000 /* 32-bit code segment */
+#define NSHUGE 0x4000 /* Huge memory segment, length of
+ * segment and minimum allocation
+ * size are in segment sector units
+ */
+#define NSGDT 0x8000 /* GDT allocation requested */
+
+#define NSPURE NSSHARED /* For compatibility */
+
+#define NSALIGN 9 /* Segment data aligned on 512 byte boundaries */
+
+#define NSLOADED 0x0004 /* ns_sector field contains memory addr */
+#endif
+
+
+struct new_segdata /* Segment data */
+ {
+ union
+ {
+ struct
+ {
+ unsigned short ns_niter; /* number of iterations */
+ unsigned short ns_nbytes; /* number of bytes */
+ char ns_iterdata; /* iterated data bytes */
+ } ns_iter;
+ struct
+ {
+ char ns_data; /* data bytes */
+ } ns_noniter;
+ } ns_union;
+ };
+
+struct new_rlcinfo /* Relocation info */
+ {
+ unsigned short nr_nreloc; /* number of relocation items that */
+ }; /* follow */
+
+#pragma pack(1)
+
+
+struct new_rlc /* Relocation item */
+ {
+ char nr_stype; /* Source type */
+ char nr_flags; /* Flag byte */
+ unsigned short nr_soff; /* Source offset */
+ union
+ {
+ struct
+ {
+ char nr_segno; /* Target segment number */
+ char nr_res; /* Reserved */
+ unsigned short nr_entry; /* Target Entry Table offset */
+ } nr_intref; /* Internal reference */
+ struct
+ {
+ unsigned short nr_mod; /* Index into Module Reference Table */
+ unsigned short nr_proc; /* Procedure ordinal or name offset */
+ } nr_import; /* Import */
+ struct
+ {
+ unsigned short nr_ostype; /* OSFIXUP type */
+ unsigned short nr_osres; /* reserved */
+ } nr_osfix; /* Operating system fixup */
+ } nr_union; /* Union */
+ };
+
+#pragma pack()
+
+
+#define NR_STYPE(x) (x).nr_stype
+#define NR_FLAGS(x) (x).nr_flags
+#define NR_SOFF(x) (x).nr_soff
+#define NR_SEGNO(x) (x).nr_union.nr_intref.nr_segno
+#define NR_RES(x) (x).nr_union.nr_intref.nr_res
+#define NR_ENTRY(x) (x).nr_union.nr_intref.nr_entry
+#define NR_MOD(x) (x).nr_union.nr_import.nr_mod
+#define NR_PROC(x) (x).nr_union.nr_import.nr_proc
+#define NR_OSTYPE(x) (x).nr_union.nr_osfix.nr_ostype
+#define NR_OSRES(x) (x).nr_union.nr_osfix.nr_osres
+
+
+
+/*
+ * Format of NR_STYPE(x) and R32_STYPE(x):
+ *
+ * 7 6 5 4 3 2 1 0 - bit no
+ * | | | |
+ * +-+-+-+--- source type
+ *
+ */
+
+#define NRSTYP 0x0f /* Source type mask */
+#define NRSBYT 0x00 /* lo byte (8-bits)*/
+#define NRSSEG 0x02 /* 16-bit segment (16-bits) */
+#define NRSPTR 0x03 /* 16:16 pointer (32-bits) */
+#define NRSOFF 0x05 /* 16-bit offset (16-bits) */
+#define NRPTR48 0x06 /* 16:32 pointer (48-bits) */
+#define NROFF32 0x07 /* 32-bit offset (32-bits) */
+#define NRSOFF32 0x08 /* 32-bit self-relative offset (32-bits) */
+
+
+/*
+ * Format of NR_FLAGS(x) and R32_FLAGS(x):
+ *
+ * 7 6 5 4 3 2 1 0 - bit no
+ * | | |
+ * | +-+--- Reference type
+ * +------- Additive fixup
+ */
+
+#define NRADD 0x04 /* Additive fixup */
+#define NRRTYP 0x03 /* Reference type mask */
+#define NRRINT 0x00 /* Internal reference */
+#define NRRORD 0x01 /* Import by ordinal */
+#define NRRNAM 0x02 /* Import by name */
+#define NRROSF 0x03 /* Operating system fixup */
+
+
+#if (EXE386 == 0)
+
+/* Resource type or name string */
+struct rsrc_string
+ {
+ char rs_len; /* number of bytes in string */
+ char rs_string[ 1 ]; /* text of string */
+ };
+
+#define RS_LEN( x ) (x).rs_len
+#define RS_STRING( x ) (x).rs_string
+
+/* Resource type information block */
+struct rsrc_typeinfo
+ {
+ unsigned short rt_id;
+ unsigned short rt_nres;
+ long rt_proc;
+ };
+
+#define RT_ID( x ) (x).rt_id
+#define RT_NRES( x ) (x).rt_nres
+#define RT_PROC( x ) (x).rt_proc
+
+/* Resource name information block */
+struct rsrc_nameinfo
+ {
+ /* The following two fields must be shifted left by the value of */
+ /* the rs_align field to compute their actual value. This allows */
+ /* resources to be larger than 64k, but they do not need to be */
+ /* aligned on 512 byte boundaries, the way segments are */
+ unsigned short rn_offset; /* file offset to resource data */
+ unsigned short rn_length; /* length of resource data */
+ unsigned short rn_flags; /* resource flags */
+ unsigned short rn_id; /* resource name id */
+ unsigned short rn_handle; /* If loaded, then global handle */
+ unsigned short rn_usage; /* Initially zero. Number of times */
+ /* the handle for this resource has */
+ /* been given out */
+ };
+
+#define RN_OFFSET( x ) (x).rn_offset
+#define RN_LENGTH( x ) (x).rn_length
+#define RN_FLAGS( x ) (x).rn_flags
+#define RN_ID( x ) (x).rn_id
+#define RN_HANDLE( x ) (x).rn_handle
+#define RN_USAGE( x ) (x).rn_usage
+
+#define RSORDID 0x8000 /* if high bit of ID set then integer id */
+ /* otherwise ID is offset of string from
+ the beginning of the resource table */
+
+ /* Ideally these are the same as the */
+ /* corresponding segment flags */
+#define RNMOVE 0x0010 /* Moveable resource */
+#define RNPURE 0x0020 /* Pure (read-only) resource */
+#define RNPRELOAD 0x0040 /* Preloaded resource */
+#define RNDISCARD 0xF000 /* Discard priority level for resource */
+
+/* Resource table */
+struct new_rsrc
+ {
+ unsigned short rs_align; /* alignment shift count for resources */
+ struct rsrc_typeinfo rs_typeinfo;
+ };
+
+#define RS_ALIGN( x ) (x).rs_align
+
+
+#endif /* NOT EXE386 */