Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
en:docs:tk:formats:newexe [2024/09/25 05:04] – prokushev | en:docs:tk:formats:newexe [2024/09/26 12:59] (current) – prokushev | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== New Executable file format ====== | ||
+ | |||
+ | New Executable (NE) file format used by set of operating system including OS/2, Windows, Multitasking MS-DOS 4 and set of DOS Extenders. It is designed to be store on disk and in-memory usage. In-disk format is same for all OSes, but In-memory usage is mostly specific for Windows systems. | ||
+ | |||
^ Offset ^ Size ^ Name ^ Description ^ | ^ Offset ^ Size ^ Name ^ Description ^ | ||
| 00h | WORD | ne_magic | Signature word NEMAGIC | | | 00h | WORD | ne_magic | Signature word NEMAGIC | | ||
Line 36: | Line 40: | ||
| 36h | BYTE | ne_exetyp | Executable type, used by loader. 02h = WINDOWS | | | 36h | BYTE | ne_exetyp | Executable type, used by loader. 02h = WINDOWS | | ||
| 37h | BYTE | ne_flagsothers | Operating system flags | | | 37h | BYTE | ne_flagsothers | Operating system flags | | ||
- | | 38h | NERESBYTES char | ne_res | Reserved | | ||
- | |||
| 38h | WORD | ??? | offset to return thunks or start of gangload area | | | 38h | WORD | ??? | offset to return thunks or start of gangload area | | ||
| 3Ah | WORD | ??? | offset to segment reference thunks or length of gangload area | | | 3Ah | WORD | ??? | offset to segment reference thunks or length of gangload area | | ||
Line 74: | Line 76: | ||
}; | }; | ||
- | struct new_rlcinfo { | + | Relocation table header |
- | WORD nr_nreloc; | + | |
- | }; | + | |
- | struct new_rlc { | + | ^ Offset ^ Size ^ Name ^ Description ^ |
- | | + | | 00h | WORD | nr_nreloc | ??? | |
- | char nr_flags; | + | |
- | | + | |
- | union { | + | |
- | struct { | + | |
- | char nr_segno; | + | |
- | char nr_res; | + | |
- | WORD nr_entry; | + | |
- | } nr_intref; | + | |
- | struct { | + | |
- | WORD nr_mod; | + | |
- | WORD nr_proc; | + | |
- | } nr_import; | + | |
- | struct { | + | |
- | WORD nr_ostype; | + | |
- | WORD nr_osres; | + | |
- | } nr_osfix; | + | |
- | } nr_union; | + | |
- | }; | + | |
- | #define NR_STYPE(x) | + | Relocation table entry |
- | #define NR_FLAGS(x) | + | |
- | #define NR_SOFF(x) | + | |
- | #define NR_SEGNO(x) | + | |
- | #define NR_RES(x) | + | |
- | #define NR_ENTRY(x) | + | |
- | #define NR_MOD(x) | + | |
- | #define NR_PROC(x) | + | |
- | #define NR_OSTYPE(x) | + | |
- | #define NR_OSRES(x) | + | |
- | #define NRSTYP | + | ^ Offset ^ Size ^ Name ^ Description ^ |
- | #define NRSBYT | + | | 00h | char | nr_stype | ??? | |
- | #define NRSSEG | + | | 01h | char | nr_flags | ??? | |
- | #define NRSPTR | + | | 02h | WORD | nr_soff | ??? | |
- | #define NRSOFF | + | | Internal fixup |||| |
- | #define NRPTR48 | + | | 04h | char | nr_segno | ??? | |
- | #define NROFF32 | + | | 05h | char | nr_res | ??? | |
- | #define NRSOFF32 | + | | 06h | WORD | nr_entry | ??? | |
+ | | ??? |||| | ||
+ | | 04h | WORD | nr_mod | ??? | | ||
+ | | 06h | WORD | nr_proc | ??? | | ||
+ | | OS Fixup |||| | ||
+ | | 04h | WORD | nr_ostype | ??? | | ||
+ | | 06h | WORD | nr_osres | ??? | | ||
- | #define NRADD 0x04 | ||
- | #define NRRTYP | ||
- | #define NRRINT | ||
- | #define NRRORD | ||
- | #define NRRNAM | ||
- | #define NRROSF | ||
- | #define NRICHAIN | ||
- | #if (EXE386 == 0) | + | ^ Offset ^ Size ^ Name ^ Description ^ |
+ | | 00h | char | rs_len | ??? | | ||
+ | | 01h | char | rs_string[1] | ??? | | ||
- | #define RS_LEN(x) | + | ^ Offset ^ Size ^ Name ^ Description ^ |
- | #define RS_STRING(x) | + | | 00h | WORD | rt_id | ??? | |
- | #define RS_ALIGN(x) | + | | 02h | WORD | rt_nres | ??? | |
+ | | 04h | DWORD | rt_proc | ??? | | ||
- | #define RT_ID(x) | + | ^ Offset ^ Size ^ Name ^ Description ^ |
- | #define RT_NRES(x) | + | | 00h | WORD | rn_offset | ??? | |
- | #define RT_PROC(x) | + | | 02h | WORD | rn_length | ??? | |
+ | | 04h | WORD | rn_flags | ??? | | ||
+ | | 06h | WORD | rn_id | ??? | | ||
+ | | 08h | WORD | rn_handle | ??? | | ||
+ | | 0Ah | WORD | rn_usage | ??? | | ||
- | #define RN_OFFSET(x) | + | ^ Offset ^ Size ^ Name ^ Description ^ |
- | #define RN_LENGTH(x) | + | | 00h | WORD | rs_align | ??? | |
- | #define RN_FLAGS(x) | + | | 02h | struct rsrc_typeinfo | rs_typeinfo | ??? | |
- | #define RN_ID(x) | + | |
- | #define RN_HANDLE(x) | + | |
- | #define RN_USAGE(x) | + | |
- | #define RSORDID | ||
- | |||
- | #define RNMOVE | ||
- | #define RNPURE | ||
- | #define RNPRELOAD | ||
- | #define RNDISCARD | ||
- | |||
- | #define NE_FFLAGS_LIBMODULE 0x8000 | ||
- | |||
- | struct rsrc_string { | ||
- | char rs_len; | ||
- | char rs_string[1]; | ||
- | }; | ||
- | |||
- | struct rsrc_typeinfo { | ||
- | WORD rt_id; | ||
- | WORD rt_nres; | ||
- | DWORD rt_proc; | ||
- | }; | ||
- | |||
- | struct rsrc_nameinfo { | ||
- | WORD rn_offset; | ||
- | WORD rn_length; | ||
- | WORD rn_flags; | ||
- | WORD rn_id; | ||
- | WORD rn_handle; | ||
- | WORD rn_usage; | ||
- | }; | ||
- | |||
- | struct new_rsrc { | ||
- | WORD rs_align; | ||
- | struct rsrc_typeinfo | ||
- | }; | ||