Subversion Repositories Kolibri OS

Rev

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