PE笔记

IMAGE_DOS_HEADER //MZ头

     ...

     LONG e_lfanew //指向PE头的地址(即PEHEADER = (IMAGE_NT_HEADERS32)*e_lfanew)

IMAGE_NT_HEADERS32 //PE头

     DWORD Signature //PE头文件标志,指定值"PE\0\0"

     IMAGE_FILE_HEADER FileHeader //PE文件物理分布信息

          ...

          WORD NumberOfSections //段的个数

          ...

     IMAGE_OPTIONAL_HEADER32 OptionalHedaer //PE文件逻辑分布信息

          //标准域

          ...

          DWORD SizeofCode //可执行代码的长度,于.text段的物理长度相同

          ...

          DWORD AddressEntryPoint //程序入口点, 最先执行代码的地址

          DWORD BaseOfCode //可执行代码的起始位置

          DWORD BaseOfData //初始化数据的起始位置

          //NT域

          DWORD ImageBase //载入程序的首选RVA地址

          DWORD SectionAlignment //段对齐方式,通常是4096

          DWORD FileAlignment //文件对齐方式,通常是512

          ...

          IMAGE_DATA_DIRECTORY DataDirectory[16] //包含了PE文件中各重要数据结构的位置和尺寸信息

               DWORD VitualAddress //RVA地址

               DWORD Size //段大小

0 Export symbols
1 Import symbols
2 Resources
3 Exception
4 Security
5 Base relocation
6 Debug
7 Copyright string
8 GlobalPtr
9 Thread local storage (TLS)
10 Load configuration
11 Bound Import
12 Import Address Table
13 Delay Import
14 COM descriptor
15 Reserved

     IMAGE_SECTION_HEADER[NumberOfSections] //段的信息

          BYTE Name[8] //段名称,如".text"

          union { DWORD PhysicalAddress; DWORD VirtualSize } Misc //物理地址与真实大小(按文件对齐方式对齐后的大小)

          DWORD VirtualAddress //映射到内存后,段的RVA

          DWORD SizeOfRawData //映射到内存按段对齐方式对齐后的物理大小

          DWORD PointerToRawData //文件中段的RVA

          ...

posted @ 2009-02-13 00:43  4h  阅读(156)  评论(0编辑  收藏  举报