Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6446 | GerdtR | 1 | /***************************************************************************** |
2 | ;* * |
||
3 | ;* This structure define format of LE header for OS/2,Windows exe files * |
||
4 | ;* ---------------------------------------------------------- * |
||
5 | ;* * |
||
6 | ;* Author Trigub Serge. B&M&T Corp. * |
||
7 | ;* 10 January 1993 * |
||
8 | ;* * |
||
9 | ;*****************************************************************************/ |
||
10 | |||
11 | enum CPU_Type |
||
12 | { |
||
13 | i80286 =0x01, |
||
14 | i80386 =0x02, |
||
15 | i80486 =0x03, |
||
16 | i80586 =0x04, |
||
17 | i860_N10 =0x20, |
||
18 | i860_N11 =0x21, |
||
19 | MIPS_Mark_I =0x40, |
||
20 | MIPS_Mark_II =0x41, |
||
21 | MIPS_Mark_III=0x42 |
||
22 | }; |
||
23 | |||
24 | struct Module_Type_Flags |
||
25 | { |
||
26 | unsigned long Module_Is_DLL [1]; |
||
27 | unsigned long Reserved1 [1]; |
||
28 | unsigned long Errors_In_Module [1]; |
||
29 | unsigned long Reserved2 [1]; |
||
30 | unsigned long Code_Load_Application[1]; |
||
31 | unsigned long Application_Type [3]; |
||
32 | |||
33 | unsigned long Reserved3 [2]; |
||
34 | unsigned long No_External_FIXUP [1]; |
||
35 | unsigned long No_Internal_FIXUP [1]; |
||
36 | unsigned long Protected_Mode_Only [1]; |
||
37 | unsigned long Global_Initialization[1]; |
||
38 | unsigned long Multipledata [1]; |
||
39 | unsigned long Singledata [1]; |
||
40 | }; |
||
41 | |||
42 | struct LE_Header |
||
43 | { |
||
44 | unsigned short Signature; // Signature 'LE' for exe header |
||
45 | unsigned char Byte_Order; |
||
46 | unsigned char Word_Order; |
||
47 | unsigned long Exec_Format_Level; |
||
48 | unsigned short CPU_Type; |
||
49 | unsigned short Target_OS; |
||
50 | unsigned long Module_Version; |
||
51 | union{ |
||
52 | unsigned long Type_Flags; |
||
53 | Module_Type_Flags Flags; |
||
54 | }; |
||
55 | unsigned long Number_Of_Memory_Pages; |
||
56 | unsigned long Initial_CS; |
||
57 | unsigned long Initial_EI; |
||
58 | unsigned long Initial_SS; |
||
59 | unsigned long Initial_ESP; |
||
60 | unsigned long Memory_Page_Size; |
||
61 | unsigned long Bytes_On_Last_Page; |
||
62 | unsigned long Fixup_Section_Size; |
||
63 | unsigned long Fixup_Section_Checksum; |
||
64 | unsigned long Loader_Section_Size; |
||
65 | unsigned long Loader_Section_CheckSum; |
||
66 | unsigned long Object_Table_Offset; |
||
67 | unsigned long Object_Table_Entries; |
||
68 | unsigned long Object_Page_Map_Table_Offset; |
||
69 | unsigned long Object_Iterate_Data_Map_Offset; |
||
70 | unsigned long Resource_Table_Offset; |
||
71 | unsigned long Resource_Table_Entries; |
||
72 | unsigned long Resident_Names_Table_Offset; |
||
73 | unsigned long Entry_Table_Offset; |
||
74 | unsigned long Module_Directives_Table_Offset; |
||
75 | unsigned long Module_Directives_Table_Entries; |
||
76 | unsigned long Fixup_Page_Table_Offset; |
||
77 | unsigned long Fixup_Record_Table_Offset; |
||
78 | unsigned long Imported_Module_Names_Table_Offset; |
||
79 | unsigned long Imported_Modules_Count; |
||
80 | unsigned long Imported_Procedure_Name_Table_Offset; |
||
81 | unsigned long Per_page_Checksum_Table_Offset; |
||
82 | unsigned long Data_Pages_Offset; |
||
83 | unsigned long Preload_Page_Count; |
||
84 | unsigned long Nonresident_Names_Table_Offset; |
||
85 | unsigned long Nonresident_Names_Table_Length; |
||
86 | unsigned long Nonresident_Names_Table_Checksum; |
||
87 | unsigned long Automatic_Data_Object; |
||
88 | unsigned long Debug_Information_Offset; |
||
89 | unsigned long Debug_Information_Length; |
||
90 | unsigned long Preload_Instance_Pages_Number; |
||
91 | unsigned long Demand_Instance_Pages_Number; |
||
92 | unsigned long Extra_Heap_Allocation; |
||
93 | unsigned long Unknown[1]; |
||
94 | }; |
||
95 | |||
96 | struct OBJ_FLAGS |
||
97 | { |
||
98 | unsigned long I_O_Privilage_Level [1]; |
||
99 | unsigned long Conforming_Segment [1]; |
||
100 | unsigned long BIG_Segment [1]; |
||
101 | unsigned long Alias_16_16 [1]; |
||
102 | unsigned long Reserved [1]; |
||
103 | unsigned long Resident_Long_Locable[1]; |
||
104 | unsigned long Segment_Type [2]; |
||
105 | unsigned long Segment_Invalid [1]; |
||
106 | unsigned long Segment_Preloaded [1]; |
||
107 | unsigned long Segment_Shared [1]; |
||
108 | unsigned long Segment_Discardable [1]; |
||
109 | unsigned long Segment_Resource [1]; |
||
110 | unsigned long Segment_Executable [1]; |
||
111 | unsigned long Segment_Writable [1]; |
||
112 | unsigned long Segment_Readable [1]; |
||
113 | }; |
||
114 | |||
115 | struct Object_Table |
||
116 | { |
||
117 | unsigned long Virtual_Segment_Size; |
||
118 | unsigned long Relocation_Base_Address; |
||
119 | union { |
||
120 | unsigned long ObjTableFlags; |
||
121 | OBJ_FLAGS FLAGS; |
||
122 | }; |
||
123 | unsigned long Page_MAP_Index; |
||
124 | unsigned long Page_MAP_Entries; |
||
125 | unsigned long Reserved; |
||
126 | }; |
||
127 | |||
128 | |||
129 | enum { |
||
130 | Segment_Type_Normal, |
||
131 | Segment_Zero_Filled, |
||
132 | Segment_Resident, |
||
133 | Segment_Resident_contiguous |
||
134 | }; |
||
135 | |||
136 | struct PM_FLAGS |
||
137 | { |
||
138 | unsigned char Page_Type:2; |
||
139 | unsigned char Reserved :6; |
||
140 | unsigned char End_Page :2; |
||
141 | }; |
||
142 | |||
143 | struct Page_Map_Table |
||
144 | { |
||
145 | unsigned short High_Page_Number; |
||
146 | unsigned char Low_Page_Number; |
||
147 | // union{ |
||
148 | // PM_FLAGS SFLAGS; |
||
149 | unsigned char FLAGS; |
||
150 | // }; |
||
151 | }; |
||
152 | |||
153 | enum{//LE_PM_FLG_Page_Type_Enum ENUM { |
||
154 | Legal_Page =0, |
||
155 | Iterated_Page =1, |
||
156 | Invalid_Page =2, |
||
157 | Zero_Filled_Page=3 |
||
158 | }; |
||
159 | |||
160 | struct Entry_Table |
||
161 | { |
||
162 | unsigned char Number_of_Entries; |
||
163 | unsigned char Bungle_Flags; |
||
164 | unsigned short Object_Index; |
||
165 | //LE_Entry_First_Entry equ $ |
||
166 | }; |
||
167 | |||
168 | struct Entry |
||
169 | { |
||
170 | unsigned char Entry_Flags; |
||
171 | union{ |
||
172 | unsigned short Word_Offset; |
||
173 | unsigned long Dword_Offset; |
||
174 | }; |
||
175 | }; |
||
176 | |||
177 | struct Entry_Bungle_Flags |
||
178 | { |
||
179 | unsigned char Bits_Entry :1; |
||
180 | unsigned char Valid_Entry:1; |
||
181 | }; |
||
182 | |||
183 | struct Fixup_Record_Table |
||
184 | { |
||
185 | unsigned char Relocation_Address_Type; |
||
186 | unsigned char Relocation_Type; |
||
187 | unsigned short Relocation_Page_Offset; |
||
188 | unsigned char Segment_or_Module_Index; |
||
189 | unsigned short Offset_Or_Ordinal_Value; |
||
190 | }; |
||
191 | |||
192 | struct Rel_Addr_Type |
||
193 | { |
||
194 | unsigned char Repeat_Offset :1; |
||
195 | unsigned char Target_OFFSET_Absent:1; |
||
196 | unsigned char Rel_Addr_Type [4]; |
||
197 | }; |
||
198 | |||
199 | enum// LE_Relocation_Address_Type_ENUM |
||
200 | { |
||
201 | RA_Low_Byte =0, |
||
202 | RA_16_bits_selector =2, |
||
203 | RA_32_bits_Far_Pointer=3, |
||
204 | RA_16_bits_Offset =5, |
||
205 | RA_48_bits_Far_Pointer=6, |
||
206 | RA_32_bits_Offset =7, |
||
207 | RA_32_bits_EIP_Rel =8 |
||
208 | }; |
||
209 | |||
210 | struct Reloc_Type |
||
211 | { |
||
212 | unsigned char Ordinal_Byte :1; |
||
213 | unsigned char Reserv1 :1; |
||
214 | unsigned char ABS_Dword :1; |
||
215 | unsigned char Target_Offset_32:1; |
||
216 | unsigned char Reserv2 :1; |
||
217 | unsigned char ADDITIVE_Type :1; |
||
218 | unsigned char Reloc_Type [2]; |
||
219 | }; |
||
220 | |||
221 | enum //LE_Relocation_Type_ENUM |
||
222 | { |
||
223 | Internal_Reference=0, |
||
224 | Imported_Ordinal =1, |
||
225 | Imported_Name =2, |
||
226 | OS_FIXUP =3 |
||
227 | }; |
||
228 |