exe.pas 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. unit Exe;
  2. interface
  3. type
  4. exe = record
  5. eid : word;
  6. elast : word;
  7. epagsiz : word;
  8. erelcnt : word;
  9. ehdrsiz : word;
  10. eminfre : word;
  11. emaxfre : word;
  12. eiSS : word;
  13. eiSP : word;
  14. enegsum : word;
  15. eiIP : word;
  16. eiCS : word;
  17. ereloff : word;
  18. eovlnum : word;
  19. ever : word;
  20. dumy : word;
  21. ebb : word;
  22. dumy2 : array[0..6] of word;
  23. end;
  24. const
  25. EXEID = $5A4D;
  26. { Declarations specific for LX-type executables follow }
  27. const
  28. BITPERword = 16;
  29. BITPERBYTE = 8;
  30. OBJPAGELEN = 4096;
  31. E32MAGIC = $584C;
  32. E32RESBYTES1 = 0;
  33. E32RESBYTES2 = 0;
  34. E32RESBYTES3 = 24;
  35. E32LEBO = $00;
  36. E32BEBO = $01;
  37. E32LEWO = $00;
  38. E32BEWO = $01;
  39. E32LEVEL = 0;
  40. E32CPU286 = $001;
  41. E32CPU386 = $002;
  42. E32CPU486 = $003;
  43. type
  44. e32_exe = record
  45. e32_magic : array[0..1] of byte;
  46. e32_border : byte;
  47. e32_worder : byte;
  48. e32_level : longint;
  49. e32_cpu : word;
  50. e32_os : word;
  51. e32_ver : longint;
  52. e32_mflags : longint;
  53. e32_mpages : longint;
  54. e32_startobj : longint;
  55. e32_eip : longint;
  56. e32_stackobj : longint;
  57. e32_esp : longint;
  58. e32_pagesize : longint;
  59. e32_pageshift : longint;
  60. e32_fixupsize : longint;
  61. e32_fixupsum : longint;
  62. e32_ldrsize : longint;
  63. e32_ldrsum : longint;
  64. e32_objtab : longint;
  65. e32_objcnt : longint;
  66. e32_objmap : longint;
  67. e32_itermap : longint;
  68. e32_rsrctab : longint;
  69. e32_rsrccnt : longint;
  70. e32_restab : longint;
  71. e32_enttab : longint;
  72. e32_dirtab : longint;
  73. e32_dircnt : longint;
  74. e32_fpagetab : longint;
  75. e32_frectab : longint;
  76. e32_impmod : longint;
  77. e32_impmodcnt : longint;
  78. e32_impproc : longint;
  79. e32_pagesum : longint;
  80. e32_datapage : longint;
  81. e32_preload : longint;
  82. e32_nrestab : longint;
  83. e32_cbnrestab : longint;
  84. e32_nressum : longint;
  85. e32_autodata : longint;
  86. e32_debuginfo : longint;
  87. e32_debuglen : longint;
  88. e32_instpreload : longint;
  89. e32_instdemand : longint;
  90. e32_heapsize : longint;
  91. e32_res3 : array[0..E32RESBYTES3-1] of byte;
  92. end;
  93. const
  94. E32NOTP = $8000;
  95. E32NOLOAD = $2000;
  96. E32PMAPI = $0300;
  97. E32PMW = $0200;
  98. E32NOPMW = $0100;
  99. E32NOEXTFIX = $0020;
  100. E32NOINTFIX = $0010;
  101. E32LIBINIT = $0004;
  102. E32LIBTERM = $40000000;
  103. E32APPMASK = $0700;
  104. E32PROTDLL = $10000;
  105. E32DEVICE = $20000;
  106. E32MODEXE = $00000;
  107. E32MODDLL = $08000;
  108. E32MODPROTDLL = $18000;
  109. E32MODPDEV = $20000;
  110. E32MODVDEV = $28000;
  111. E32MODMASK = $38000;
  112. RINTSIZE16 = 8;
  113. RINTSIZE32 = 10;
  114. RORDSIZE = 8;
  115. RNAMSIZE16 = 8;
  116. RNAMSIZE32 = 10;
  117. RADDSIZE16 = 10;
  118. RADDSIZE32 = 12;
  119. NRSTYP = $0f;
  120. NRSBYT = $00;
  121. NRSSEG = $02;
  122. NRSPTR = $03;
  123. NRSOFF = $05;
  124. NRPTR48 = $06;
  125. NROFF32 = $07;
  126. NRSOFF32 = $08;
  127. NRSRCMASK = $0f;
  128. NRALIAS = $10;
  129. NRCHAIN = $20;
  130. NRRTYP = $03;
  131. NRRINT = $00;
  132. NRRORD = $01;
  133. NRRNAM = $02;
  134. NRADD = $04;
  135. NRRENT = $03;
  136. NR32BITOFF = $10;
  137. NR32BITADD = $20;
  138. NR16OBJMOD = $40;
  139. NR8BITORD = $80;
  140. PAGEPERDIR = 62;
  141. LG2DIR = 7;
  142. type
  143. OBJPAGEDIR = record
  144. next : longint;
  145. ht : array[0..PAGEPERDIR-1] of word;
  146. end;
  147. e32_obj = record
  148. o32_size : longint;
  149. o32_base : longint;
  150. o32_flags : longint;
  151. o32_pagemap : longint;
  152. o32_mapsize : longint;
  153. o32_reserved : longint;
  154. end;
  155. const
  156. OBJREAD = $0001;
  157. OBJWRITE = $0002;
  158. OBJRSRC = $0008;
  159. OBJINVALID = $0080;
  160. LNKNONPERM = $0600;
  161. OBJNONPERM = $0000;
  162. OBJPERM = $0100;
  163. OBJRESIDENT = $0200;
  164. OBJCONTIG = $0300;
  165. OBJDYNAMIC = $0400;
  166. OBJTYPEMASK = $0700;
  167. OBJALIAS16 = $1000;
  168. OBJBIGDEF = $2000;
  169. OBJIOPL = $8000;
  170. NSDISCARD = $0010;
  171. NSMOVE = NSDISCARD;
  172. NSSHARED = $0020;
  173. NSPRELOAD = $0040;
  174. NSEXRD = $0004;
  175. NSCONFORM = $4000;
  176. type
  177. o32_map = record
  178. o32_pagedataoffset : longint;
  179. o32_pagesize : word;
  180. o32_pageflags : word;
  181. end;
  182. const
  183. VALID = $0000;
  184. ITERDATA = $0001;
  185. INVALID = $0002;
  186. ZEROED = $0003;
  187. RANGE = $0004;
  188. ITERDATA2 = $0005;
  189. type
  190. rsrc32 = record
  191. _type : word;
  192. name : word;
  193. cb : longint;
  194. obj : word;
  195. offset : longint;
  196. end;
  197. {$PACKRECORDS 1}
  198. LX_Iter = record
  199. LX_nIter : word;
  200. LX_nBytes : word;
  201. LX_Iterdata : byte;
  202. end;
  203. b32_bundle = record
  204. b32_cnt : byte;
  205. b32_type : byte;
  206. b32_obj : word;
  207. end;
  208. {$PACKRECORDS NORMAL}
  209. const
  210. FIXENT16 = 3;
  211. FIXENT32 = 5;
  212. GATEENT16 = 5;
  213. FWDENT = 7;
  214. EMPTY = $00;
  215. ENTRY16 = $01;
  216. GATE16 = $02;
  217. ENTRY32 = $03;
  218. ENTRYFWD = $04;
  219. TYPEINFO = $80;
  220. E32EXPORT = $01;
  221. E32SHARED = $02;
  222. E32PARAMS = $f8;
  223. FWD_ORDINAL = $01;
  224. implementation
  225. end.