0


PE文件格式全解读

PE文件格式

PE文件包括DOS部分、PE文件头和节表和节数据。从DOS头(DOS header)到节区头(Sectionheader)是PE头部分,其下的节区合称PE体。节数据包括代码(.text)、数据(.data)、资源(.rsrc)节,分别保存。

1.DOS****部分:

  • IMAGE_DOS_HEADER (MZ**文件头 0x40)**

IMAGE_DOS_HEADER结构体的大小为40字节,需要注意的2个重要成员:

0x0-0x01

e_magic: DOS签名,表文件开始标识

0x4d5a=”MZ”

0x3c-0x3f

e_lfanew:PE头部分的偏移

0x000000b0.

  • dos stub

DOS存根位于DOS头下方,是个可选项,且大小不固定,即使没有DOS存根,文件也能正常运行,DOS存根由代码与数据混合而成。

2.PE头部分:IMAGE_NT_HEADERS

IMAGE_NT_HEADERS结构体大小为F8,由3个成员组成,第一个成员为签名结构体,其值为50450000h("PE"00),另外两个成员分别为文件头与可选头结构体。

  • signature0x04****字节)

0x00-0x03

PE标记,PE\0\0

50h 45h 00h 00h

  • *IMAGE_FILE_HEADER 映像文件头(0x14*字节)

0x04-0x05

machine

0x014c=”x86”

0x06-0x07

NumberOfSections文件中节的个数

0x0003=3

0x14-0x15

SizeOfOptionalHeader:可选文件头大小

0x000e=14

  • IMAGE_OPTIONAL_HEADER()

0x28-0x2b

AddressOfEntryPoint, RVA值,代码起始地址

0x00001000

0x34-0x37

ImageBase,文件的优先装入地址,基址。

文件地址:ImageBase+AddressOfEntryPoint=0x401000.

0x00400000

0x38-0x3b

SectionAlignment,内存中的对齐粒度

0x1000

0x3c-0x3f

FileAlignment,文件中的对齐粒度

0x200

0x74-0x77

NumberOfRvaAndSIzes

用来指定数据目录列表data_directory的个数。

0x00000010

SizeOfImage

加载PE文件到内存时,SizeOfImage指定了PE Image在虚拟内存中所占空间的大小,一般而言,文件的大小与加载到内存的大小是不同的。

SizeofHeader

用来指出整个PE头的大小,该值也必须是FileAlignment的整数倍。

**(3)节表IMAGE_SECTION_HEADER**

*可以看到有三个节表项,*text,rdata,data,每个节表项是40*字节*

0x0-0x7

节表名称,例如“.text”或者****code

2e 74 65 78 74 .text

63 6f 64 65 code

0x8-0xB

Virtual size , 内存中大小(内存对齐前的长度),即节区真实大小

因为内存的对齐粒度是0x1000

所以,节区在内存中的大小是****0x1000

因为文件的对齐粒度是0x200

所以,节区在文件中的大小是****0x200

0x00000046

0x0c-0x0f

VirtualAddress:内存中节区RVA

所以,在内存中的实际地址为:

Imagebase+virtualaddress=0x401000

0x00001000

0x10-0x13

SizeOfRawData:文件中大小(文件对齐后的长度)

0x00000200 (46<200)

0x14-0x17

PointerToRawData:文件中节区RVA

0x00000400

0x24-0x27

Characteristics:节区属性

0x60000020

节的解析请看下一章

标签: 安全

本文转载自: https://blog.csdn.net/caoyitong/article/details/125185618
版权归原作者 江南无妖 所有, 如有侵权,请联系我们删除。

“PE文件格式全解读”的评论:

还没有评论