home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vp21beta.zip / LRTLSRC.RAR / PE2ELF / PE2LETY.PAS < prev    next >
Pascal/Delphi Source File  |  2000-08-15  |  9KB  |  265 lines

  1. unit pe2lety;
  2.  
  3. interface
  4.  
  5. type
  6.   speicherfeld_typ      =array[0..1024*1024*500] of byte;
  7.   speicherfeld_z_typ    =^speicherfeld_typ;
  8.   longint_z             =^longint;
  9.   smallword_z           =^smallword;
  10.  
  11.   pe_kopf_typ=
  12.     record
  13.       sig               :array[0..3] of char;
  14.       cpu               :smallword;
  15.       num_obj           :smallword;
  16.       timdate           :longint;
  17.       res1              :longint;
  18.       res2              :longint;
  19.       nthdrsize         :smallword;
  20.       flags             :smallword;
  21.       res3              :smallword;
  22.       lmajor            :byte;
  23.       lminor            :byte;
  24.       res_1c            :longint;
  25.       res_20            :longint;
  26.       res_24            :longint;
  27.       entrypoint        :longint;
  28.       res_2c            :longint;
  29.       res_30            :longint;
  30.       image_base        :longint;
  31.       object_align      :longint;
  32.       file_align        :longint;
  33.       osmajor           :byte;
  34.       osminor           :byte;
  35.       usermajor         :byte;
  36.       userminor         :byte;
  37.       subsysmajor       :byte;
  38.       subsysminor       :byte;
  39.       res_4c            :longint;
  40.       image_size        :longint;
  41.       header_size       :longint;
  42.       file_checksum     :longint;
  43.       subsystem         :smallword;
  44.       dll_flags         :smallword;
  45.       stack_reserve_size:longint;
  46.       stack_commit_size :longint;
  47.       heap_reserve_size :longint;
  48.       heap_commit_size  :longint;
  49.       res_70            :longint;
  50.       interestings      :longint;
  51.       export_table      :longint;
  52.       export_data_size  :longint;
  53.       import_table      :longint;
  54.       import_data_size  :longint;
  55.       resource_table    :longint;
  56.       resource_data_size:longint;
  57.       exception_table   :longint;
  58.       exception_table_size:longint;
  59.       security_table    :longint;
  60.       security_size     :longint;
  61.       fixup             :longint;
  62.       fixup_size        :longint;
  63.       debug             :longint;
  64.       debug_directories :longint;
  65.       image_description :longint;
  66.       description_size  :longint;
  67.       machine_specific  :longint;
  68.       machine_specific_size:longint;
  69.       thread_local_storage:longint;
  70.       tls_size          :longint;
  71.     end;
  72.  
  73.   pe_obj_typ=
  74.     record
  75.       name              :array[0..7] of char;
  76.       virtual_size      :longint;
  77.       rva               :longint;
  78.       physical_size     :longint;
  79.       physical_offset   :longint;
  80.       res1,res2,res3    :longint;
  81.       obj_flags         :longint;
  82.     end;
  83.  
  84.   pe_obj_typen=(code32,_bss,const32,idata,reloc,res);
  85.  
  86.   le_kopf_typ=
  87.     record
  88.       sig               :array[0..1] of char;
  89.       byte_order        :byte;
  90.       word_order        :byte;
  91.       executable_format_level:longint;
  92.       cpu_typ           :smallword;
  93.       target_os         :smallword;
  94.       module_version    :longint;
  95.       module_type       :longint;
  96.       number_of_memory_pages:longint;
  97.       cs_obj_nummer     :longint;
  98.       eip_obj_ofs       :longint;
  99.       ss_obj_nummer     :longint;
  100.       esp_obj_ofs       :longint;
  101.       memory_page_size  :longint;
  102.       bytes_on_last_page:longint;
  103.       fixup_section_size:longint;
  104.       fixup_section_checksum            :longint;
  105.       loader_section_size               :longint;
  106.       loader_section_checksum           :longint;
  107.       offset_of_object_table            :longint;
  108.       object_table_entries              :longint;
  109.       object_page_map_table_offset      :longint;
  110.       object_iterate_data_map_offset    :longint;
  111.       resource_table_offset             :longint;
  112.       resource_table_entries            :longint;
  113.       resident_names_table_offset       :longint;
  114.       entry_table_offset                :longint;
  115.       module_directives_table_offset    :longint;
  116.       Module_Directives_entries         :longint;
  117.       Fixup_page_table_offset           :longint;
  118.       Fixup_record_table_offset         :longint;
  119.       imported_modules_name_table_offset:longint;
  120.       imported_modules_count            :longint;
  121.       imported_procedures_name_table_offset:longint;
  122.       perpage_checksum_table_offset     :longint;
  123.       data_pages_offset                 :longint;
  124.       preload_page_count                :longint;
  125.       nonresident_names_table_offset    :longint;
  126.       nonresident_names_table_length    :longint;
  127.       nonresident_names_checksum        :longint;
  128.       automatic_data_object             :longint;
  129.       debug_information_offset          :longint;
  130.       debug_information_length          :longint;
  131.       preload_instance_pages_number     :longint;
  132.       demand_instance_pages_number      :longint;
  133.       extra_heap_allocation             :longint;
  134.       reserved          :array[$ac..$b7] of byte;
  135.       vxd_schrott       :array[$b8..$c3] of byte;
  136.     end;
  137.  
  138.   le_obj_typ=
  139.     record
  140.       virtual_size_in_bytes:longint;
  141.       relocation_base_address:longint;
  142.       object_flags      :longint;
  143.         (* 0      readable
  144.            1      writable
  145.            2      executable
  146.            3      resource
  147.            4      discardable
  148.            5      shared
  149.            6      preloaded
  150.            7      invalid
  151.            8-9    type
  152.                   00 normal
  153.                   01 zero-filled
  154.                   10 resident
  155.                   11 resident and contiguous
  156.            10     resident and long-lockable
  157.            11     reserved
  158.            12     16:16 alias required
  159.            13     "BIG" (Huge: 32-bit)
  160.            14     conforming
  161.            15     "OBJECT_I/O_PRIVILEGE_LEVEL"
  162.            16-31  reserved                       *)
  163.  
  164.       page_map_index    :longint;
  165.       page_map_entries  :longint;
  166.       reserved          :array[$14..$17] of byte;
  167.     end;
  168.  
  169.   page_map_entry_typ=
  170.     record
  171.       res_0                     :byte;
  172.       index_into_fixup_table    :smallword;
  173.         (* 0000h if no relocation info *)
  174.       type_                     :byte;
  175.         (* 00h hard copy in file, 03h some relocation needed *)
  176.     end;
  177.  
  178.   page_map_entry_feld_typ       =array[1..80000] of page_map_entry_typ;
  179.   page_map_entry_feld_z_typ     =^page_map_entry_feld_typ;
  180.  
  181.   Fixup_page_table_typ          =array[1..80000] of longint;
  182.  
  183.   Fixup_page_table_z_typ        =^Fixup_page_table_typ;
  184.  
  185.   pe_relo_typ=
  186.     record
  187.       page_rva          :longint;
  188.       block_size        :longint;
  189.       fixup             :array[1..8000] of smallword;
  190.     end;
  191.   pe_relo_z_typ         =^pe_relo_typ;
  192.  
  193.   le_relo_typ=
  194.     record
  195.       type_                             :byte;
  196.        (* bits 7-4: modifier (0001 single, 0011 multiple)
  197.           bits 3-0: type
  198.                   0000 byte offset
  199.                   0010 word segment
  200.                   0011 16-bit far pointer (DWORD)
  201.                   0101 16-bit offset
  202.                   0110 32-bit far pointer (PWORD)
  203.                   0111 32-bit offset
  204.                   1000 near call or jump, WORD/DWORD based on seg attrib *)
  205.       linear_executable_fixup_type      :byte;
  206.        (* 7      ordinal is BYTE rather than WORD
  207.           6      16-rather than 8-object number/module ordinal
  208.           5      addition with DWORD rather than WORD
  209.           4      relocation info has size with new two bytes at end
  210.           3      reserved (0)
  211.           2      set if add to destination, clear to replace destination
  212.           1-0    type
  213.                  00 internal fixup
  214.                  01 external fixup, imported by ordinal
  215.                  10 external fixup, imported by name
  216.                  11 internal fixup via entry table                       *)
  217.       number_of_items                   :byte;
  218.       object_number                     :byte;
  219.       ofs_t                             :array[0..255] of smallword;
  220.     end;
  221.   le_relo_z_typ=^le_relo_typ;
  222.  
  223.   exe_kopf_typ=
  224.     record
  225.       sig               :array[0..1] of char;
  226.       mod512,
  227.       page512,
  228.       relo_anz,
  229.       kopfgroesse,
  230.       min,max,
  231.       _ss,
  232.       _sp,
  233.       pruefsumme,
  234.       _ip,
  235.       _cs,
  236.       relo_ofs,
  237.       ov_nummer         :smallword;
  238.       rest              :array[$1c..$3b] of byte;
  239.       x_exe_zeiger      :longint;
  240.     end;
  241.  
  242.   info_block_typ=
  243.     record
  244.       ofs,
  245.       phys_laenge,
  246.       log_laenge        :longint;
  247.     end;
  248.  
  249.   abschnitte=(startcode,
  250.               resource,
  251.               code,
  252.               bss,
  253.               daten,
  254.               alles_zusammen);
  255.  
  256.   info_block_tabelle_typ=array[startcode..alles_zusammen] of info_block_typ;
  257.  
  258.   startcode_typ=(startcode_kein,startcode_watcom,startcode_relopack,startcode_debug);
  259.  
  260.  
  261. implementation
  262.  
  263. end.
  264.  
  265.