home *** CD-ROM | disk | FTP | other *** search
/ Guide To Cracking 2002 / Guide_to_Cracking_2002.iso / Programming / yPP-B-SRC.ZIP / pelib.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2000-07-29  |  7.8 KB  |  256 lines

  1. unit pelib;
  2.  
  3. interface
  4.  
  5. uses Windows;
  6.  
  7. const
  8.   IMAGE_DOS_SIGNATURE    = $5A4D;       { MZ }
  9.   IMAGE_OS2_SIGNATURE    = $454E;       { NE }
  10.   IMAGE_OS2_SIGNATURE_LE = $454C;       { LE }
  11.   IMAGE_VXD_SIGNATURE    = $454C;       { LE }
  12.   IMAGE_NT_SIGNATURE     = $00004550;   { PE00 }
  13.  
  14.   IMAGE_SIZEOF_SHORT_NAME          = 8;
  15.   IMAGE_SIZEOF_SECTION_HEADER      = 40;
  16.   IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
  17.   IMAGE_RESOURCE_NAME_IS_STRING    = $80000000;
  18.   IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000;
  19.   IMAGE_OFFSET_STRIP_HIGH          = $7FFFFFFF;
  20.  
  21. type
  22.   PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
  23.   IMAGE_DOS_HEADER = packed record      { DOS .EXE header }
  24.     e_magic         : WORD;             { Magic number }
  25.     e_cblp          : WORD;             { Bytes on last page of file }
  26.     e_cp            : WORD;             { Pages in file }
  27.     e_crlc          : WORD;             { Relocations }
  28.     e_cparhdr       : WORD;             { Size of header in paragraphs }
  29.     e_minalloc      : WORD;             { Minimum extra paragraphs needed }
  30.     e_maxalloc      : WORD;             { Maximum extra paragraphs needed }
  31.     e_ss            : WORD;             { Initial (relative) SS value }
  32.     e_sp            : WORD;             { Initial SP value }
  33.     e_csum          : WORD;             { Checksum }
  34.     e_ip            : WORD;             { Initial IP value }
  35.     e_cs            : WORD;             { Initial (relative) CS value }
  36.     e_lfarlc        : WORD;             { File address of relocation table }
  37.     e_ovno          : WORD;             { Overlay number }
  38.     e_res           : packed array [0..3] of WORD; { Reserved words }
  39.     e_oemid         : WORD;             { OEM identifier (for e_oeminfo) }
  40.     e_oeminfo       : WORD;             { OEM information; e_oemid specific }
  41.     e_res2          : packed array [0..9] of WORD; { Reserved words }
  42.     e_lfanew        : Longint;          { File address of new exe header }
  43.   end;
  44.  
  45.   PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
  46.   IMAGE_FILE_HEADER = packed record
  47.     Machine              : WORD;
  48.     NumberOfSections     : WORD;
  49.     TimeDateStamp        : DWORD;
  50.     PointerToSymbolTable : DWORD;
  51.     NumberOfSymbols      : DWORD;
  52.     SizeOfOptionalHeader : WORD;
  53.     Characteristics      : WORD;
  54.   end;
  55.  
  56.   PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
  57.   IMAGE_DATA_DIRECTORY = packed record
  58.     VirtualAddress  : DWORD;
  59.     Size            : DWORD;
  60.   end;
  61.  
  62.   PIMAGE_OPTIONAL_HEADER = ^IMAGE_OPTIONAL_HEADER;
  63.   IMAGE_OPTIONAL_HEADER = packed record
  64.    { Standard fields. }
  65.     Magic           : WORD;
  66.     MajorLinkerVersion : Byte;
  67.     MinorLinkerVersion : Byte;
  68.     SizeOfCode      : DWORD;
  69.     SizeOfInitializedData : DWORD;
  70.     SizeOfUninitializedData : DWORD;
  71.     AddressOfEntryPoint : DWORD;
  72.     BaseOfCode      : DWORD;
  73.     BaseOfData      : DWORD;
  74.    { NT additional fields. }
  75.     ImageBase       : DWORD;
  76.     SectionAlignment : DWORD;
  77.     FileAlignment   : DWORD;
  78.     MajorOperatingSystemVersion : WORD;
  79.     MinorOperatingSystemVersion : WORD;
  80.     MajorImageVersion : WORD;
  81.     MinorImageVersion : WORD;
  82.     MajorSubsystemVersion : WORD;
  83.     MinorSubsystemVersion : WORD;
  84.     Reserved1       : DWORD;
  85.     SizeOfImage     : DWORD;
  86.     SizeOfHeaders   : DWORD;
  87.     CheckSum        : DWORD;
  88.     Subsystem       : WORD;
  89.     DllCharacteristics : WORD;
  90.     SizeOfStackReserve : DWORD;
  91.     SizeOfStackCommit : DWORD;
  92.     SizeOfHeapReserve : DWORD;
  93.     SizeOfHeapCommit : DWORD;
  94.     LoaderFlags     : DWORD;
  95.     NumberOfRvaAndSizes : DWORD;
  96.     DataDirectory   : packed array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1] of IMAGE_DATA_DIRECTORY;
  97.   end;
  98.  
  99.   PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
  100.   IMAGE_SECTION_HEADER = packed record
  101.     Name            : packed array [0..IMAGE_SIZEOF_SHORT_NAME-1] of Char;
  102.     PhysicalAddress : DWORD; // or VirtualSize (union);
  103.     VirtualAddress  : DWORD;
  104.     SizeOfRawData   : DWORD;
  105.     PointerToRawData : DWORD;
  106.     PointerToRelocations : DWORD;
  107.     PointerToLinenumbers : DWORD;
  108.     NumberOfRelocations : WORD;
  109.     NumberOfLinenumbers : WORD;
  110.     Characteristics : DWORD;
  111.   end;
  112.  
  113.   PIMAGE_NT_HEADERS = ^IMAGE_NT_HEADERS;
  114.   IMAGE_NT_HEADERS = packed record
  115.     Signature       : DWORD;
  116.     FileHeader      : IMAGE_FILE_HEADER;
  117.     OptionalHeader  : IMAGE_OPTIONAL_HEADER;
  118.   end;
  119.  
  120. { Import Table }
  121.  
  122.  PIMAGE_IMAGE_IMPORT_DESCRIPTOR =^IMAGE_IMAGE_IMPORT_DESCRIPTOR;
  123.  IMAGE_IMAGE_IMPORT_DESCRIPTOR  = packed record
  124.     OriginalFirstThunk  : DWORD;
  125.     TimeDateStamp       : DWORD;
  126.     ForwarderChain      : DWORD;
  127.     Name1               : DWORD;
  128.     FirstThunk          : DWORD;
  129.   end;
  130.  
  131.   PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
  132.   IMAGE_IMPORT_BY_NAME  = packed record
  133.     Hint                : WORD;
  134.     Name1               : array [1..150] of char;
  135.   end;
  136.  
  137.  
  138. { Resources }
  139.  
  140.   PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
  141.   IMAGE_RESOURCE_DIRECTORY = packed record
  142.     Characteristics : DWORD;
  143.     TimeDateStamp   : DWORD;
  144.     MajorVersion    : WORD;
  145.     MinorVersion    : WORD;
  146.     NumberOfNamedEntries : WORD;
  147.     NumberOfIdEntries : WORD;
  148.   end;
  149.  
  150.   PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
  151.   IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record
  152.     Name: DWORD;        // Or ID: Word (Union)
  153.     OffsetToData: DWORD;
  154.   end;
  155.  
  156.   PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
  157.   IMAGE_RESOURCE_DATA_ENTRY = packed record
  158.     OffsetToData    : DWORD;
  159.     Size            : DWORD;
  160.     CodePage        : DWORD;
  161.     Reserved        : DWORD;
  162.   end;
  163.  
  164.   PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
  165.   IMAGE_RESOURCE_DIR_STRING_U = packed record
  166.     Length          : WORD;
  167.     NameString      : array [0..0] of WCHAR;
  168.   end;
  169.  
  170. {
  171.     /* Predefined resource types */
  172.     #define    RT_NEWRESOURCE      0x2000
  173.     #define    RT_ERROR            0x7fff
  174.     #define    RT_CURSOR           1
  175.     #define    RT_BITMAP           2
  176.     #define    RT_ICON             3
  177.     #define    RT_MENU             4
  178.     #define    RT_DIALOG           5
  179.     #define    RT_STRING           6
  180.     #define    RT_FONTDIR          7
  181.     #define    RT_FONT             8
  182.     #define    RT_ACCELERATORS     9
  183.     #define    RT_RCDATA           10
  184.     #define    RT_MESSAGETABLE     11
  185.     #define    RT_GROUP_CURSOR     12
  186.     #define    RT_GROUP_ICON       14
  187.     #define    RT_VERSION          16
  188.     #define    RT_NEWBITMAP        (RT_BITMAP|RT_NEWRESOURCE)
  189.     #define    RT_NEWMENU          (RT_MENU|RT_NEWRESOURCE)
  190.     #define    RT_NEWDIALOG        (RT_DIALOG|RT_NEWRESOURCE)
  191.  
  192. }
  193.  
  194. type
  195.   TResourceType = (
  196.     rtUnknown0,
  197.     rtCursorEntry,
  198.     rtBitmap,
  199.     rtIconEntry,
  200.     rtMenu,
  201.     rtDialog,
  202.     rtString,
  203.     rtFontDir,
  204.     rtFont,
  205.     rtAccelerators,
  206.     rtRCData,
  207.     rtMessageTable,
  208.     rtCursor,
  209.     rtUnknown13,
  210.     rtIcon,
  211.     rtUnknown15,
  212.     rtVersion);
  213.  
  214. { Resource Type Constants }
  215.  
  216. const
  217.   StringsPerBlock = 16;
  218.  
  219. { Resource Related Structures from RESFMT.TXT in WIN32 SDK }
  220.  
  221. type
  222.  
  223.   PIconHeader = ^TIconHeader;
  224.   TIconHeader = packed record
  225.     wReserved: Word;         { Currently zero }
  226.     wType: Word;             { 1 for icons }
  227.     wCount: Word;            { Number of components }
  228.   end;
  229.  
  230.   PIconResInfo = ^TIconResInfo;
  231.   TIconResInfo = packed record
  232.     bWidth: Byte;
  233.     bHeight: Byte;
  234.     bColorCount: Byte;
  235.     bReserved: Byte;
  236.     wPlanes: Word;
  237.     wBitCount: Word;
  238.     lBytesInRes: DWORD;
  239.     wNameOrdinal: Word;      { Points to component }
  240.   end;
  241.  
  242.   PCursorResInfo = ^TCursorResInfo;
  243.   TCursorResInfo = packed record
  244.     wWidth: Word;
  245.     wHeight: Word;
  246.     wPlanes: Word;
  247.     wBitCount: Word;
  248.     lBytesInRes: DWORD;
  249.     wNameOrdinal: Word;      { Points to component }
  250.   end;
  251.  
  252.  
  253. implementation
  254.  
  255. end.
  256.