PE文件详解------PE文件结构剖析

本文详细介绍了PE文件的结构,包括Dos头、PE头、块表、块和调试信息。重点讲解了Dos头中的关键字段,如e_lfanew指向PE头,并探讨了PE头中的Signature、FileHeader和OptionalHeader。此外,还提到了 Dos Stub、PE文件映像头(FileHeader和OptionalHeader)以及数据目录的作用。文章最后列举了不同类型的块,如.text、.data、.idata等,以及它们的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.PE文件结构纵览


PE文件的结构如上图所示,由低地址到高地址分别为:Dos头,PE头,块表,块,调试信息。其中真正的PE文件头是位于Dos头的后面的部分。


上图为利用PE工具打开的一个可执行文件在磁盘中的映射,这就是PE文件的内部信息。

可以看到这个文件的钱两个字节为”4D 5A”,表示的就是Dos头的第一个字段的额信息,标示Dos的头部。在Dos头结构的最后一个字段是一个指针,这个指针指向PE头。在上图中可以看到00 00 00 60表示的就是这个指针的值,它指向这个PE文件的真正PE头。根据这个地址可以找到PE头开始的地方,45 50表示的就是PE头结构的而第一个字段,标示的就是PE头。可以看到,PE文件的结构十分分明,没有一块多余的地方,各个部分排列紧凑,井井有条。我们获取PE文件的信息就是通过读取这个2进制文件。


二.Dos 头(Dos Header)

Dos头中的信息存储在IMAGE_DOS_HEADER中。这个结构的定义为:

 

IMAGE_DOS_HEADER STRUCT

{

+0hWORDe_magic //Magic DOS signature MZ(4Dh 5Ah) DOS 可执行文件标记

+2h WORD e_cblp //Bytes on last page of file

+4hWORD e_cp //Pages in file

+6hWORD e_crlc //Relocations

+8hWORD e_cparhdr //Size of header in paragraphs

+0ahWORD e_minalloc //Minimun extra paragraphs needs

+0chWORD e_maxalloc //Maximun extra paragraphs needs

+0ehWORD e_ss //intial(relative)SS value DOS 代码的初始化堆栈SS

+10hWORD e_sp //intial SP value DOS 代码的初始化堆栈指针SP

+12hWORD e_csum //Checksum

+14hWORD e_ip // intial IP value DOS 代码的初始化指令入口[指针IP]

+16hWORD e_cs //intial(relative)CS value DOS 代码的初始堆栈入口

+18hWORD e_lfarlc //File Address of relocation table

+1ahWORD e_ovno // Overlay number

+1chWORD e_res[4] //Reserved words

+24hWORD e_oemid // OEM identifier(for e_oeminfo)

+26hWORD e_oeminfo // OEM information;e_oemid specific

+29hWORD e_res2[10] // Reserved words

+3chDWORD e_lfanew //Offset to start of PE header 指向PE 文件头

} IMAGE_DOS_HEADER ENDS

 

搜索任意目录中的所有文件,并按照PE文件和非PE文件分类,并把PE文件按照PE文件头16字分类。 结果如下: NO. PE_Header_HEX Number PE_Header_ASCII 1 4D 5A 90 00 03 00 11 11 11 11 10 00 FF FF 00 00 1 MZ? 2 4D 5A 90 00 03 00 01 11 11 11 11 00 FF FF 00 00 1 MZ? 3 4D 5A 90 00 03 00 00 00 11 11 10 00 FF FF 00 00 1 MZ? 4 4D 5A 90 00 03 00 00 00 01 11 00 00 FF FF 00 00 1 MZ? 5 4D 5A 90 00 03 00 00 01 11 10 00 00 FF FF 00 00 1 MZ? 6 4D 5A 90 00 03 00 00 00 11 11 11 10 FF FF 00 00 1 MZ? 7 4D 5A 90 11 11 11 11 10 04 00 00 00 FF FF 00 00 1 MZ? 8 4D 5A 90 00 03 00 11 11 04 01 10 00 FF 11 00 00 1 MZ? 9 4D 5A 90 01 13 00 00 00 04 00 00 01 11 FF 00 00 1 MZ? 10 4D 5A 90 00 03 00 00 01 11 11 11 11 1F FF 00 00 1 MZ? 11 4D 5A 44 56 41 50 41 11 11 11 14 6C 6C 00 6F 6C 1 MZDVAPA 12 4D 5A 72 75 6E 20 71 11 11 11 12 20 57 69 6E 33 1 MZrun qWin3 13 4D 5A 90 00 11 11 00 00 04 00 00 00 FF FF 00 00 1 MZ? 14 4D 5A 90 00 03 00 00 00 04 00 00 01 11 11 11 10 1 MZ? 15 4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 01 10 1 MZP 16 4D 5A 50 00 02 00 00 10 04 11 11 00 FF FF 00 00 1 MZP 17 4D 5A 72 75 6E 20 75 E1 11 11 12 20 57 69 6E 33 1 MZrun u?Win3 18 4D 5A 90 54 68 69 73 20 70 72 6F 67 72 61 6D 20 2 MZ怲hiprogram 19 4D 5A D2 00 19 00 02 00 20 00 00 00 FF FF AD 02 1 MZ? 20 4D 5A 47 44 49 33 32 2E 64 6C 6C 00 55 53 45 52 2 MZGDI32.dll 21 4D 5A 90 00 03 00 02 22 22 22 22 20 FF FF 00 00 1 MZ? 22 4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00 2 MZP 23 4D 5A 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 6F 7MZKERNEL32.dll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值