PE.H
上传用户:shouhua
上传日期:2014-12-06
资源大小:5685k
文件大小:3k
源码类别:

杀毒

开发平台:

Visual C++

  1. /* 
  2. ===== PE structures and types definition =====
  3. */
  4. #ifndef PE_H
  5. #define PE_H
  6. typedef struct
  7. {
  8.   unsigned short cpuType;
  9.   unsigned short numSections;
  10.   unsigned long dateStamp;
  11.   unsigned long symbolTable;
  12.   unsigned long numSymbols;
  13.   unsigned short optionalHeaderSize;
  14.   unsigned short flags;
  15. } PEHeader;
  16. typedef struct 
  17. {
  18.   unsigned short magic;
  19.   unsigned char linkerMajor;
  20.   unsigned char linkerMinor;
  21.   unsigned long codeSize;
  22.   unsigned long initDataSize;
  23.   unsigned long uninitDataSize;
  24.   unsigned long entryPoint;
  25.   unsigned long codeBase;
  26.   unsigned long dataBase;
  27. } StdOptionalHeader;
  28. typedef struct 
  29. {
  30.   unsigned short magic;
  31.   unsigned char linkerMajor;
  32.   unsigned char linkerMinor;
  33.   unsigned long codeSize;
  34.   unsigned long initDataSize;
  35.   unsigned long uninitDataSize;
  36.   unsigned long entryPoint;
  37.   unsigned long codeBase;
  38.   unsigned long dataBase;
  39.   // extra NT stuff
  40.   unsigned long imageBase;
  41.   unsigned long sectionAlign;
  42.   unsigned long fileAlign;
  43.   unsigned short osMajor;
  44.   unsigned short osMinor;
  45.   unsigned short imageMajor;
  46.   unsigned short imageMinor;
  47.   unsigned short subsystemMajor;
  48.   unsigned short subsystemMinor;
  49.   unsigned long reserved;
  50.   unsigned long imageSize;
  51.   unsigned long headersSize;
  52.   unsigned long checksum;
  53.   unsigned short subsystem;
  54.   unsigned short dllFlags;
  55.   unsigned long stackReserveSize;
  56.   unsigned long stackCommitSize;
  57.   unsigned long heapReserveSize;
  58.   unsigned long heapCommitSize;
  59.   unsigned long loaderFlags;
  60.   unsigned long numDataDirectories;
  61. } NTOptionalHeader;
  62. typedef struct 
  63. {
  64.   unsigned short magic;
  65.   unsigned char linkerMajor;
  66.   unsigned char linkerMinor;
  67.   unsigned long codeSize;
  68.   unsigned long initDataSize;
  69.   unsigned long uninitDataSize;
  70.   unsigned long entryPoint;
  71.   unsigned long codeBase;
  72.   unsigned long dataBase;
  73.   unsigned long bssBase;
  74.   unsigned long gprMask;
  75.   unsigned long cprMask[4];
  76.   unsigned long gpValue;
  77. } ROMOptionalHeader;
  78. #define NTOptionalHeaderMagic 0x10b
  79. #define ROMOptionalHeaderMagic 0x107
  80. typedef struct
  81. {
  82.   unsigned long RVA;
  83.   unsigned long size;
  84. } DataDirectory;
  85. typedef struct
  86. {
  87.   unsigned char name[8];
  88.   union
  89.   {
  90.     unsigned long virtualSize;
  91.     unsigned long physicalAddress;
  92.   } misc;
  93.   unsigned long RVA;
  94.   unsigned long dataAlignSize;
  95.   unsigned long dataOffset;
  96.   unsigned long relocationsOffset; //}not actually used in PE
  97.   unsigned long lineNumbersOffset; //}
  98.   unsigned short numRelocations;   //}
  99.   unsigned short numLineNumbers;   //}
  100.   unsigned long flags;
  101. } Section;
  102. #define ExportDataDirectory 0
  103. #define ImportDataDirectory 1
  104. #define ResourceDataDirectory 2
  105. #define ExceptionDataDirectory 3
  106. #define SecurityDataDirectory 4
  107. #define BaseRelocDataDirectory 5
  108. #define DebugDataDirectory 6
  109. #define CopyrightDataDirectory 7
  110. #define GlobalPtrdataDirectory 8
  111. #define TlsDataDirectory 9
  112. #define LoadConfigDataDirectory 10
  113. static char *dataDirNames[] = {"Export",
  114.        "Import",
  115.        "Resource",
  116.        "Exception",
  117.        "Security",
  118.        "BaseReloc",
  119.        "Debug",
  120.        "Copyright",
  121.        "GlobalPtr",
  122.        "TlsData",
  123.        "LoadConfig",
  124.        "BoundImport",
  125.        "IAT"};
  126. #endif