PE文件学习笔记(2)

来源:互联网 发布:java jre 64位 编辑:程序博客网 时间:2024/05/01 02:19

PE 表头(PE Header)

1 PE 表头
内含的重要信息包括程序代码和资料区域的大小位置、适用的操作系统、堆栈(stack)的
最初大小等等。

2 文件最前面的数百个字节是所谓的 DOS stub ,当 Win32 加载器把一个 PE 档映像到内存,内存
映像文件(memory mapped file )的第一个字节对应到 DOS Stub 的第一个字节。

3 e_lfanew 字段是一个相对偏移值(或说是 RVA ),指向真正的 PE 表头。为了获得指
标,你必须为 RVA 加上 image 的基地址:
pNTHeader = dosHeader + dosHeader->e_lfanew;

 

4 PE 表头整个是个IMAGE_NT_HEADERS 结构,此一结构有一个 DWORD 和两个子结构:
    DWORD Signature;  // ASCII 的 PE/0/0

    IMAGE_FILE_HEADER FileHeader;     //此结构内含最基础的文件信息

 

    IMAGE_OPTIONAL_HEADER OptionalHeader;

/////////////////////////////////////////////////////////////////////////////////////////////////////////

   

  1) WORD Machine

 

  2) WORD NumberOfSections

 

  3) DWORD TimeDateStamp

 

  4) DWORD PointerToSymbolTable

 

  5) DWORD NumberOfSymbols

 

  6) WORD SizeOfOptionalHeader

 

  7) WORD Characteristics

 

  上面七个部分就是IMAGE_FILE_HEADER FileHeader的结构

 

  下面还剩下 IMAGE_OPTIONAL_HEADER OptionalHeader

 

   其中最重要的两个字段是 ImageBase 和 Subsystem

 

   详细如下

 

   1) WORD Magic

 

   2) DWORD SizeOfCode

 

   3) DWORD SizeOfInitializedData

 

   4) DWORD SizeOfUninitializedData

   5) DWORD AddressOfEntryPoint

   6) DWORD BaseOfCode

 

   7) DWORD BaseOfData

   8) DWORD ImageBase

   

   9) DWORD SectionAlignment

 

  10) DWORD FileAlignment

 

  11) WORD MajorOperatingSystemVersion


  12) WORD MinorOperatingSystemVersion

 

  13) WORD MajorImageVersion

  14) WORD MinorImageVersion
 

  15) WORD MajorSubsystemVersion

  16) WORD MinorSubsystemVersion

 

  17) DWORD Reserved1

  18) DWORD SizeOfImage

 

  19) DWORD SizeOfHeaders

  20) DWORD CheckSum

 

  21) WORD Subsystem


22) WORD DllCharacteristics


23) DWORD SizeOfStackReserve

24) DWORD SizeOfStackCommit

 

25) DWORD SizeOfHeapReserve

 

26) DWORD SizeOfHeapCommit

 

27) DWORD LoaderFlags

 

28) DWORD NumberOfRvaAndSizes

 

29) IMAGE_DATA_DIRECTORY DataDirectory [IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

 




原创粉丝点击