|
@@ -1,31 +1,242 @@
|
|
-unit exe;
|
|
|
|
|
|
+unit Exe;
|
|
|
|
|
|
interface
|
|
interface
|
|
|
|
|
|
type
|
|
type
|
|
exe = record
|
|
exe = record
|
|
- eid : WORD;
|
|
|
|
- elast : WORD;
|
|
|
|
- epagsiz : WORD;
|
|
|
|
- erelcnt : WORD;
|
|
|
|
- ehdrsiz : WORD;
|
|
|
|
- eminfre : WORD;
|
|
|
|
- emaxfre : WORD;
|
|
|
|
- eiSS : WORD;
|
|
|
|
- eiSP : WORD;
|
|
|
|
- enegsum : WORD;
|
|
|
|
- eiIP : WORD;
|
|
|
|
- eiCS : WORD;
|
|
|
|
- ereloff : WORD;
|
|
|
|
- eovlnum : WORD;
|
|
|
|
- ever : WORD;
|
|
|
|
- dumy : WORD;
|
|
|
|
- ebb : WORD;
|
|
|
|
- dumy2 : array[0..7-1] of WORD;
|
|
|
|
|
|
+ eid : word;
|
|
|
|
+ elast : word;
|
|
|
|
+ epagsiz : word;
|
|
|
|
+ erelcnt : word;
|
|
|
|
+ ehdrsiz : word;
|
|
|
|
+ eminfre : word;
|
|
|
|
+ emaxfre : word;
|
|
|
|
+ eiSS : word;
|
|
|
|
+ eiSP : word;
|
|
|
|
+ enegsum : word;
|
|
|
|
+ eiIP : word;
|
|
|
|
+ eiCS : word;
|
|
|
|
+ ereloff : word;
|
|
|
|
+ eovlnum : word;
|
|
|
|
+ ever : word;
|
|
|
|
+ dumy : word;
|
|
|
|
+ ebb : word;
|
|
|
|
+ dumy2 : array[0..6] of word;
|
|
end;
|
|
end;
|
|
|
|
|
|
const
|
|
const
|
|
- EXEID = $5a4d;
|
|
|
|
|
|
+ EXEID = $5A4D;
|
|
|
|
+
|
|
|
|
+{ Declarations specific for LX-type executables follow }
|
|
|
|
+ const
|
|
|
|
+ BITPERword = 16;
|
|
|
|
+ BITPERBYTE = 8;
|
|
|
|
+ OBJPAGELEN = 4096;
|
|
|
|
+ E32MAGIC = $584C;
|
|
|
|
+ E32RESBYTES1 = 0;
|
|
|
|
+ E32RESBYTES2 = 0;
|
|
|
|
+ E32RESBYTES3 = 24;
|
|
|
|
+ E32LEBO = $00;
|
|
|
|
+ E32BEBO = $01;
|
|
|
|
+ E32LEWO = $00;
|
|
|
|
+ E32BEWO = $01;
|
|
|
|
+ E32LEVEL = 0;
|
|
|
|
+ E32CPU286 = $001;
|
|
|
|
+ E32CPU386 = $002;
|
|
|
|
+ E32CPU486 = $003;
|
|
|
|
+
|
|
|
|
+ type
|
|
|
|
+ e32_exe = record
|
|
|
|
+ e32_magic : array[0..1] of byte;
|
|
|
|
+ e32_border : byte;
|
|
|
|
+ e32_worder : byte;
|
|
|
|
+ e32_level : longint;
|
|
|
|
+ e32_cpu : word;
|
|
|
|
+ e32_os : word;
|
|
|
|
+ e32_ver : longint;
|
|
|
|
+ e32_mflags : longint;
|
|
|
|
+ e32_mpages : longint;
|
|
|
|
+ e32_startobj : longint;
|
|
|
|
+ e32_eip : longint;
|
|
|
|
+ e32_stackobj : longint;
|
|
|
|
+ e32_esp : longint;
|
|
|
|
+ e32_pagesize : longint;
|
|
|
|
+ e32_pageshift : longint;
|
|
|
|
+ e32_fixupsize : longint;
|
|
|
|
+ e32_fixupsum : longint;
|
|
|
|
+ e32_ldrsize : longint;
|
|
|
|
+ e32_ldrsum : longint;
|
|
|
|
+ e32_objtab : longint;
|
|
|
|
+ e32_objcnt : longint;
|
|
|
|
+ e32_objmap : longint;
|
|
|
|
+ e32_itermap : longint;
|
|
|
|
+ e32_rsrctab : longint;
|
|
|
|
+ e32_rsrccnt : longint;
|
|
|
|
+ e32_restab : longint;
|
|
|
|
+ e32_enttab : longint;
|
|
|
|
+ e32_dirtab : longint;
|
|
|
|
+ e32_dircnt : longint;
|
|
|
|
+ e32_fpagetab : longint;
|
|
|
|
+ e32_frectab : longint;
|
|
|
|
+ e32_impmod : longint;
|
|
|
|
+ e32_impmodcnt : longint;
|
|
|
|
+ e32_impproc : longint;
|
|
|
|
+ e32_pagesum : longint;
|
|
|
|
+ e32_datapage : longint;
|
|
|
|
+ e32_preload : longint;
|
|
|
|
+ e32_nrestab : longint;
|
|
|
|
+ e32_cbnrestab : longint;
|
|
|
|
+ e32_nressum : longint;
|
|
|
|
+ e32_autodata : longint;
|
|
|
|
+ e32_debuginfo : longint;
|
|
|
|
+ e32_debuglen : longint;
|
|
|
|
+ e32_instpreload : longint;
|
|
|
|
+ e32_instdemand : longint;
|
|
|
|
+ e32_heapsize : longint;
|
|
|
|
+ e32_res3 : array[0..E32RESBYTES3-1] of byte;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ const
|
|
|
|
+ E32NOTP = $8000;
|
|
|
|
+ E32NOLOAD = $2000;
|
|
|
|
+ E32PMAPI = $0300;
|
|
|
|
+ E32PMW = $0200;
|
|
|
|
+ E32NOPMW = $0100;
|
|
|
|
+ E32NOEXTFIX = $0020;
|
|
|
|
+ E32NOINTFIX = $0010;
|
|
|
|
+ E32LIBINIT = $0004;
|
|
|
|
+ E32LIBTERM = $40000000;
|
|
|
|
+ E32APPMASK = $0700;
|
|
|
|
+ E32PROTDLL = $10000;
|
|
|
|
+ E32DEVICE = $20000;
|
|
|
|
+ E32MODEXE = $00000;
|
|
|
|
+ E32MODDLL = $08000;
|
|
|
|
+ E32MODPROTDLL = $18000;
|
|
|
|
+ E32MODPDEV = $20000;
|
|
|
|
+ E32MODVDEV = $28000;
|
|
|
|
+ E32MODMASK = $38000;
|
|
|
|
+ RINTSIZE16 = 8;
|
|
|
|
+ RINTSIZE32 = 10;
|
|
|
|
+ RORDSIZE = 8;
|
|
|
|
+ RNAMSIZE16 = 8;
|
|
|
|
+ RNAMSIZE32 = 10;
|
|
|
|
+ RADDSIZE16 = 10;
|
|
|
|
+ RADDSIZE32 = 12;
|
|
|
|
+ NRSTYP = $0f;
|
|
|
|
+ NRSBYT = $00;
|
|
|
|
+ NRSSEG = $02;
|
|
|
|
+ NRSPTR = $03;
|
|
|
|
+ NRSOFF = $05;
|
|
|
|
+ NRPTR48 = $06;
|
|
|
|
+ NROFF32 = $07;
|
|
|
|
+ NRSOFF32 = $08;
|
|
|
|
+ NRSRCMASK = $0f;
|
|
|
|
+ NRALIAS = $10;
|
|
|
|
+ NRCHAIN = $20;
|
|
|
|
+ NRRTYP = $03;
|
|
|
|
+ NRRINT = $00;
|
|
|
|
+ NRRORD = $01;
|
|
|
|
+ NRRNAM = $02;
|
|
|
|
+ NRADD = $04;
|
|
|
|
+ NRRENT = $03;
|
|
|
|
+ NR32BITOFF = $10;
|
|
|
|
+ NR32BITADD = $20;
|
|
|
|
+ NR16OBJMOD = $40;
|
|
|
|
+ NR8BITORD = $80;
|
|
|
|
+ PAGEPERDIR = 62;
|
|
|
|
+ LG2DIR = 7;
|
|
|
|
+
|
|
|
|
+ type
|
|
|
|
+ OBJPAGEDIR = record
|
|
|
|
+ next : longint;
|
|
|
|
+ ht : array[0..PAGEPERDIR-1] of word;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ e32_obj = record
|
|
|
|
+ o32_size : longint;
|
|
|
|
+ o32_base : longint;
|
|
|
|
+ o32_flags : longint;
|
|
|
|
+ o32_pagemap : longint;
|
|
|
|
+ o32_mapsize : longint;
|
|
|
|
+ o32_reserved : longint;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ const
|
|
|
|
+ OBJREAD = $0001;
|
|
|
|
+ OBJWRITE = $0002;
|
|
|
|
+ OBJRSRC = $0008;
|
|
|
|
+ OBJINVALID = $0080;
|
|
|
|
+ LNKNONPERM = $0600;
|
|
|
|
+ OBJNONPERM = $0000;
|
|
|
|
+ OBJPERM = $0100;
|
|
|
|
+ OBJRESIDENT = $0200;
|
|
|
|
+ OBJCONTIG = $0300;
|
|
|
|
+ OBJDYNAMIC = $0400;
|
|
|
|
+ OBJTYPEMASK = $0700;
|
|
|
|
+ OBJALIAS16 = $1000;
|
|
|
|
+ OBJBIGDEF = $2000;
|
|
|
|
+ OBJIOPL = $8000;
|
|
|
|
+ NSDISCARD = $0010;
|
|
|
|
+ NSMOVE = NSDISCARD;
|
|
|
|
+ NSSHARED = $0020;
|
|
|
|
+ NSPRELOAD = $0040;
|
|
|
|
+ NSEXRD = $0004;
|
|
|
|
+ NSCONFORM = $4000;
|
|
|
|
+
|
|
|
|
+ type
|
|
|
|
+ o32_map = record
|
|
|
|
+ o32_pagedataoffset : longint;
|
|
|
|
+ o32_pagesize : word;
|
|
|
|
+ o32_pageflags : word;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ const
|
|
|
|
+ VALID = $0000;
|
|
|
|
+ ITERDATA = $0001;
|
|
|
|
+ INVALID = $0002;
|
|
|
|
+ ZEROED = $0003;
|
|
|
|
+ RANGE = $0004;
|
|
|
|
+ ITERDATA2 = $0005;
|
|
|
|
+
|
|
|
|
+ type
|
|
|
|
+ rsrc32 = record
|
|
|
|
+ _type : word;
|
|
|
|
+ name : word;
|
|
|
|
+ cb : longint;
|
|
|
|
+ obj : word;
|
|
|
|
+ offset : longint;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+{$PACKRECORDS 1}
|
|
|
|
+
|
|
|
|
+ LX_Iter = record
|
|
|
|
+ LX_nIter : word;
|
|
|
|
+ LX_nBytes : word;
|
|
|
|
+ LX_Iterdata : byte;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ b32_bundle = record
|
|
|
|
+ b32_cnt : byte;
|
|
|
|
+ b32_type : byte;
|
|
|
|
+ b32_obj : word;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+{$PACKRECORDS NORMAL}
|
|
|
|
+ const
|
|
|
|
+ FIXENT16 = 3;
|
|
|
|
+ FIXENT32 = 5;
|
|
|
|
+ GATEENT16 = 5;
|
|
|
|
+ FWDENT = 7;
|
|
|
|
+ EMPTY = $00;
|
|
|
|
+ ENTRY16 = $01;
|
|
|
|
+ GATE16 = $02;
|
|
|
|
+ ENTRY32 = $03;
|
|
|
|
+ ENTRYFWD = $04;
|
|
|
|
+ TYPEINFO = $80;
|
|
|
|
+ E32EXPORT = $01;
|
|
|
|
+ E32SHARED = $02;
|
|
|
|
+ E32PARAMS = $f8;
|
|
|
|
+ FWD_ORDINAL = $01;
|
|
|
|
|
|
implementation
|
|
implementation
|
|
|
|
|