Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.  
  229.