Subversion Repositories Kolibri OS

Rev

Rev 908 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. typedef unsigned short WORD;
  3. typedef unsigned int DWORD;
  4. typedef unsigned int LONG;
  5. typedef unsigned char BYTE;
  6.  
  7. #define IMAGE_DOS_SIGNATURE  0x5A4D
  8. #define IMAGE_NT_SIGNATURE   0x00004550
  9. #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
  10.  
  11. #pragma pack(push,2)
  12. typedef struct _IMAGE_DOS_HEADER
  13. {
  14.     WORD    e_magic;
  15.     WORD    e_cblp;
  16.     WORD    e_cp;
  17.     WORD    e_crlc;
  18.     WORD    e_cparhdr;
  19.     WORD    e_minalloc;
  20.     WORD    e_maxalloc;
  21.     WORD    e_ss;
  22.     WORD    e_sp;
  23.     WORD    e_csum;
  24.     WORD    e_ip;
  25.     WORD    e_cs;
  26.     WORD    e_lfarlc;
  27.     WORD    e_ovno;
  28.     WORD    e_res[4];
  29.     WORD    e_oemid;
  30.     WORD    e_oeminfo;
  31.     WORD    e_res2[10];
  32.     LONG    e_lfanew;
  33. } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
  34. #pragma pack(pop)
  35.  
  36.  
  37. #pragma pack(push,4)
  38. typedef struct _IMAGE_FILE_HEADER
  39. {
  40.     WORD    Machine;
  41.     WORD    NumberOfSections;
  42.     DWORD   TimeDateStamp;
  43.     DWORD   PointerToSymbolTable;
  44.     DWORD   NumberOfSymbols;
  45.     WORD    SizeOfOptionalHeader;
  46.     WORD    Characteristics;
  47. } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
  48.  
  49. typedef struct _IMAGE_DATA_DIRECTORY {
  50.     DWORD   VirtualAddress;
  51.     DWORD   Size;
  52. } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
  53.  
  54. #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES    16
  55.  
  56. typedef struct _IMAGE_OPTIONAL_HEADER {
  57.     WORD    Magic;
  58.     BYTE    MajorLinkerVersion;
  59.     BYTE    MinorLinkerVersion;
  60.     DWORD   SizeOfCode;
  61.     DWORD   SizeOfInitializedData;
  62.     DWORD   SizeOfUninitializedData;
  63.     DWORD   AddressOfEntryPoint;
  64.     DWORD   BaseOfCode;
  65.     DWORD   BaseOfData;
  66.     DWORD   ImageBase;
  67.     DWORD   SectionAlignment;
  68.     DWORD   FileAlignment;
  69.     WORD    MajorOperatingSystemVersion;
  70.     WORD    MinorOperatingSystemVersion;
  71.     WORD    MajorImageVersion;
  72.     WORD    MinorImageVersion;
  73.     WORD    MajorSubsystemVersion;
  74.     WORD    MinorSubsystemVersion;
  75.     DWORD   Win32VersionValue;
  76.     DWORD   SizeOfImage;
  77.     DWORD   SizeOfHeaders;
  78.     DWORD   CheckSum;
  79.     WORD    Subsystem;
  80.     WORD    DllCharacteristics;
  81.     DWORD   SizeOfStackReserve;
  82.     DWORD   SizeOfStackCommit;
  83.     DWORD   SizeOfHeapReserve;
  84.     DWORD   SizeOfHeapCommit;
  85.     DWORD   LoaderFlags;
  86.     DWORD   NumberOfRvaAndSizes;
  87.         IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
  88. } IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;
  89.  
  90. #pragma pack(pop)
  91.  
  92.  
  93. #pragma pack(push,4)
  94. typedef struct _IMAGE_NT_HEADERS
  95. {
  96.     DWORD Signature;
  97.         IMAGE_FILE_HEADER FileHeader;
  98.         IMAGE_OPTIONAL_HEADER OptionalHeader;
  99. } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
  100.  
  101. #define IMAGE_SIZEOF_SHORT_NAME    8
  102.  
  103. typedef struct _IMAGE_SECTION_HEADER
  104. {
  105.         BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
  106.     union
  107.     {
  108.         DWORD PhysicalAddress;
  109.                 DWORD VirtualSize;
  110.         } Misc;
  111.     DWORD   VirtualAddress;
  112.     DWORD   SizeOfRawData;
  113.     DWORD   PointerToRawData;
  114.     DWORD   PointerToRelocations;
  115.     DWORD   PointerToLinenumbers;
  116.     WORD    NumberOfRelocations;
  117.     WORD    NumberOfLinenumbers;
  118.     DWORD   Characteristics;
  119. } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
  120. #pragma pack(pop)
  121.  
  122. #pragma pack(push,4)
  123. typedef struct _IMAGE_BASE_RELOCATION {
  124.         DWORD VirtualAddress;
  125.         DWORD SizeOfBlock;
  126. } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
  127. #pragma pack(pop)
  128.  
  129. typedef struct _IMAGE_IMPORT_DESCRIPTOR
  130. {
  131.     union
  132.     {
  133.                 DWORD Characteristics;
  134.                 DWORD OriginalFirstThunk;
  135.     };
  136.     DWORD   TimeDateStamp;
  137.     DWORD   ForwarderChain;
  138.     DWORD   Name;
  139.     DWORD   FirstThunk;
  140. } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
  141.  
  142. typedef struct _IMAGE_THUNK_DATA32
  143. {
  144.     union
  145.     {
  146.                 DWORD ForwarderString;
  147.                 DWORD Function;
  148.                 DWORD Ordinal;
  149.                 DWORD AddressOfData;
  150.         } u1;
  151. } IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
  152.  
  153. typedef struct _IMAGE_IMPORT_BY_NAME
  154. {
  155.         WORD Hint;
  156.         BYTE Name[1];
  157. } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
  158.  
  159. #define IMAGE_ORDINAL_FLAG 0x80000000
  160.  
  161. typedef struct _IMAGE_EXPORT_DIRECTORY {
  162.         DWORD Characteristics;
  163.         DWORD TimeDateStamp;
  164.         WORD MajorVersion;
  165.         WORD MinorVersion;
  166.         DWORD Name;
  167.         DWORD Base;
  168.         DWORD NumberOfFunctions;
  169.         DWORD NumberOfNames;
  170.         DWORD AddressOfFunctions;
  171.         DWORD AddressOfNames;
  172.         DWORD AddressOfNameOrdinals;
  173. } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
  174.  
  175.  
  176. typedef struct
  177. {
  178.     link_t  link;
  179.  
  180.     addr_t  img_base;
  181.     size_t  img_size;
  182.     char   *img_name;
  183.     md_t   *img_md;
  184.  
  185.     PIMAGE_NT_HEADERS32      img_hdr;
  186.     PIMAGE_SECTION_HEADER    img_sec;
  187.     PIMAGE_EXPORT_DIRECTORY  img_exp;
  188.     u32_t   img_map[8];                  /* mapped treads */
  189. }dll_t;
  190.  
  191.  
  192. #define MakePtr( cast, ptr, addValue ) (cast)( (addr_t)(ptr) + (addr_t)(addValue) )
  193.  
  194.  
  195. dll_t * find_dll(const char *name);
  196.  
  197.  
  198. md_t* __fastcall load_image(const char *path);
  199.  
  200. void __export create_image(addr_t img_base, addr_t image) asm ("CreateImage");
  201.  
  202.  
  203.