exe.pas 5.6 KB

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