0,0 → 1,228 |
/***************************************************************************** |
;* * |
;* This structure define format of LE header for OS/2,Windows exe files * |
;* ---------------------------------------------------------- * |
;* * |
;* Author Trigub Serge. B&M&T Corp. * |
;* 10 January 1993 * |
;* * |
;*****************************************************************************/ |
|
enum CPU_Type |
{ |
i80286 =0x01, |
i80386 =0x02, |
i80486 =0x03, |
i80586 =0x04, |
i860_N10 =0x20, |
i860_N11 =0x21, |
MIPS_Mark_I =0x40, |
MIPS_Mark_II =0x41, |
MIPS_Mark_III=0x42 |
}; |
|
struct Module_Type_Flags |
{ |
unsigned long Module_Is_DLL [1]; |
unsigned long Reserved1 [1]; |
unsigned long Errors_In_Module [1]; |
unsigned long Reserved2 [1]; |
unsigned long Code_Load_Application[1]; |
unsigned long Application_Type [3]; |
|
unsigned long Reserved3 [2]; |
unsigned long No_External_FIXUP [1]; |
unsigned long No_Internal_FIXUP [1]; |
unsigned long Protected_Mode_Only [1]; |
unsigned long Global_Initialization[1]; |
unsigned long Multipledata [1]; |
unsigned long Singledata [1]; |
}; |
|
struct LE_Header |
{ |
unsigned short Signature; // Signature 'LE' for exe header |
unsigned char Byte_Order; |
unsigned char Word_Order; |
unsigned long Exec_Format_Level; |
unsigned short CPU_Type; |
unsigned short Target_OS; |
unsigned long Module_Version; |
union{ |
unsigned long Type_Flags; |
Module_Type_Flags Flags; |
}; |
unsigned long Number_Of_Memory_Pages; |
unsigned long Initial_CS; |
unsigned long Initial_EI; |
unsigned long Initial_SS; |
unsigned long Initial_ESP; |
unsigned long Memory_Page_Size; |
unsigned long Bytes_On_Last_Page; |
unsigned long Fixup_Section_Size; |
unsigned long Fixup_Section_Checksum; |
unsigned long Loader_Section_Size; |
unsigned long Loader_Section_CheckSum; |
unsigned long Object_Table_Offset; |
unsigned long Object_Table_Entries; |
unsigned long Object_Page_Map_Table_Offset; |
unsigned long Object_Iterate_Data_Map_Offset; |
unsigned long Resource_Table_Offset; |
unsigned long Resource_Table_Entries; |
unsigned long Resident_Names_Table_Offset; |
unsigned long Entry_Table_Offset; |
unsigned long Module_Directives_Table_Offset; |
unsigned long Module_Directives_Table_Entries; |
unsigned long Fixup_Page_Table_Offset; |
unsigned long Fixup_Record_Table_Offset; |
unsigned long Imported_Module_Names_Table_Offset; |
unsigned long Imported_Modules_Count; |
unsigned long Imported_Procedure_Name_Table_Offset; |
unsigned long Per_page_Checksum_Table_Offset; |
unsigned long Data_Pages_Offset; |
unsigned long Preload_Page_Count; |
unsigned long Nonresident_Names_Table_Offset; |
unsigned long Nonresident_Names_Table_Length; |
unsigned long Nonresident_Names_Table_Checksum; |
unsigned long Automatic_Data_Object; |
unsigned long Debug_Information_Offset; |
unsigned long Debug_Information_Length; |
unsigned long Preload_Instance_Pages_Number; |
unsigned long Demand_Instance_Pages_Number; |
unsigned long Extra_Heap_Allocation; |
unsigned long Unknown[1]; |
}; |
|
struct OBJ_FLAGS |
{ |
unsigned long I_O_Privilage_Level [1]; |
unsigned long Conforming_Segment [1]; |
unsigned long BIG_Segment [1]; |
unsigned long Alias_16_16 [1]; |
unsigned long Reserved [1]; |
unsigned long Resident_Long_Locable[1]; |
unsigned long Segment_Type [2]; |
unsigned long Segment_Invalid [1]; |
unsigned long Segment_Preloaded [1]; |
unsigned long Segment_Shared [1]; |
unsigned long Segment_Discardable [1]; |
unsigned long Segment_Resource [1]; |
unsigned long Segment_Executable [1]; |
unsigned long Segment_Writable [1]; |
unsigned long Segment_Readable [1]; |
}; |
|
struct Object_Table |
{ |
unsigned long Virtual_Segment_Size; |
unsigned long Relocation_Base_Address; |
union { |
unsigned long ObjTableFlags; |
OBJ_FLAGS FLAGS; |
}; |
unsigned long Page_MAP_Index; |
unsigned long Page_MAP_Entries; |
unsigned long Reserved; |
}; |
|
|
enum { |
Segment_Type_Normal, |
Segment_Zero_Filled, |
Segment_Resident, |
Segment_Resident_contiguous |
}; |
|
struct PM_FLAGS |
{ |
unsigned char Page_Type:2; |
unsigned char Reserved :6; |
unsigned char End_Page :2; |
}; |
|
struct Page_Map_Table |
{ |
unsigned short High_Page_Number; |
unsigned char Low_Page_Number; |
// union{ |
// PM_FLAGS SFLAGS; |
unsigned char FLAGS; |
// }; |
}; |
|
enum{//LE_PM_FLG_Page_Type_Enum ENUM { |
Legal_Page =0, |
Iterated_Page =1, |
Invalid_Page =2, |
Zero_Filled_Page=3 |
}; |
|
struct Entry_Table |
{ |
unsigned char Number_of_Entries; |
unsigned char Bungle_Flags; |
unsigned short Object_Index; |
//LE_Entry_First_Entry equ $ |
}; |
|
struct Entry |
{ |
unsigned char Entry_Flags; |
union{ |
unsigned short Word_Offset; |
unsigned long Dword_Offset; |
}; |
}; |
|
struct Entry_Bungle_Flags |
{ |
unsigned char Bits_Entry :1; |
unsigned char Valid_Entry:1; |
}; |
|
struct Fixup_Record_Table |
{ |
unsigned char Relocation_Address_Type; |
unsigned char Relocation_Type; |
unsigned short Relocation_Page_Offset; |
unsigned char Segment_or_Module_Index; |
unsigned short Offset_Or_Ordinal_Value; |
}; |
|
struct Rel_Addr_Type |
{ |
unsigned char Repeat_Offset :1; |
unsigned char Target_OFFSET_Absent:1; |
unsigned char Rel_Addr_Type [4]; |
}; |
|
enum// LE_Relocation_Address_Type_ENUM |
{ |
RA_Low_Byte =0, |
RA_16_bits_selector =2, |
RA_32_bits_Far_Pointer=3, |
RA_16_bits_Offset =5, |
RA_48_bits_Far_Pointer=6, |
RA_32_bits_Offset =7, |
RA_32_bits_EIP_Rel =8 |
}; |
|
struct Reloc_Type |
{ |
unsigned char Ordinal_Byte :1; |
unsigned char Reserv1 :1; |
unsigned char ABS_Dword :1; |
unsigned char Target_Offset_32:1; |
unsigned char Reserv2 :1; |
unsigned char ADDITIVE_Type :1; |
unsigned char Reloc_Type [2]; |
}; |
|
enum //LE_Relocation_Type_ENUM |
{ |
Internal_Reference=0, |
Imported_Ordinal =1, |
Imported_Name =2, |
OS_FIXUP =3 |
}; |
|