pe文件头分析

uedit32.exe PE头分析

此处输入图片的描述 此处输入图片的描述

1.DOS MZ头IMAGE_DOS_HEADER(64字节)

此处输入图片的描述 word:二字节 dword:四字节 IMAGE_DOS_HEADER STRUCT

成员 偏移量 大小 解释
e_magic 00000000 word 5A4D EXE标志,”MZ”
e_cblp 00000002 word 0090 最后页中的节数,为144字节
e_cp 00000004 word 0003 文件中全部和部分页数,为3页
e_crlc 00000006 word 0000 重定位表中的指针数,0个
e_cparhdr 00000008 word 0004 头部尺寸,以段落为单位,为4个段落
e_minalloc 0000000A word 0000 所需的最小附加段,值为10
e_maxalloc 0000000C word FFFF 所需的最大附加段,值为65535
e_ss 0000000E word 0000 初始的ss值(相对偏移量),为0
e_sp 00000010 word 00b8 初始的sp值,为184
e_csum 00000012 word 0000 补码校验和,为0
e_ip 00000014 word 0000 初始IP值,值为0
e_cs 00000016 word 0000 初始的CS值,值为0
e_lfarlc 00000018 word 0040 重定位表的字节偏移量,值为64
e_ovno 0000001A word 0000 所需的最小附加段,值为10
e_res4 0000001c 0000001E 00000020 00000022 word 0000 0000 0000 0000 保留字
e_oemid 00000024 word 0000 OEM标志符(相对e_oeminfo),为0
e_oeminfo 00000026 word 0000 OEM信息,为0
e_res2[10] 00000028 0000002A 0000002C 0000002E 00000030 00000032 00000034 00000036 00000038 0000003A word 0000 保留字
e_lfanew 0000003c dword 00000110 PE头的相对文件的偏移地址,为0x110

IMAGE_DOS_HEADER ENDS

  • dos mz头下面是DOS Stub.整个DOS Stub是一个字节块,其内容随着链接时使用的链接器不同而不同,PE中并没有与之对应的相关结构。 此处输入图片的描述

2.PE头标识Signature(4字节)

紧跟在DOS Stub后面的是PE头标识Signature.与大部分文件格式的头部结构一样,PE头部信息中有一个四字节的标识,该标识位于指针IMAGE_DOS_HEADER.e_lfanew指向的位置。其内容固定,对应于ASCII码的字符串”PE\0\0” 此处输入图片的描述

成员 偏移量 大小 解释
signature 00000110 Dword 00004550 标识对应于ASCII码”PE\0\0”

3.标准PE头IMAGE_FILE_HEADER(20字节)

标准PE头IMAGE_FILE_HEADER紧跟在PE头标识后,即位于IMAGE_DOS_HEADER的e_lfanew值+4的位置。由此位置开始的20个字节为数据结构标准PE头IMAGE_FILE_HEADER的内容。该结构在微软的官方文档中被称为标准通用对象文件格式(Common Object File Format,COFF)头。它记录了PE文件的全部属性,如该PE文件运行的平台、PE文件类型(是EXE文件还是DLL文件)、文件中存在的节的总数等。 此处输入图片的描述

成员 偏移量 大小 解释
Machine 00000114 word 014c 运行平台为Intel 386处理器或后续兼容处理器
NumberOfSections 00000116 word 0006 PE中节的数量为6
TimeDateStamp 00000118 Dword 497621B0 文件创建日期与时间,
低32为存放的值是自1970年1月1日00:00
时开始到创建时间为止的总秒数
PointerToSymbolTable 0000011C Dword 00000000 coff符号表的文件偏移,
赞成在PE中使用COFF调试信息
NumberOfSymbols 00000120 Dword 00000000 符号表中的符号数量为0(用于调试)
SizeOfOptionalHeader 00000124 word 00E0 扩展头结构的长度为3584
Characteristics 00000126 word 0103 文件属性:第0,1,8位分别被设置为1,
IMAGE_FILE_RELOCS_STRIPPED,
IMGE_FILE_EXECUTABLE_IMAGE,
IMAGE_FILE_32BIT_MACHINE,
表示该文件不存在重定位信息,
文件是可执行的,文件只能在32位平台上运行

该结构常用于判断PE文件是EXE类型还是DLL类型(本pe文件第13位0,故不是DLL文件),不但可以通过该结构得到PE文件中节的总量,还可以当成对节区信息进行遍历操作的循环次数。

4.扩展PE头IMAGE_OPTIONAL_HEADER32(216字节)

此处输入图片的描述

成员 偏移量 大小 解释
Magic 00000128 word 010B 魔术字,表示该文件为PE32
MajorLinkerVersion 0000012A Byte 08 链接器的版本号
MinorLinkerVersion 0000012B Byte 00 链接器的版本号
SizeOfCode 0000012C Dword 00561000 所有含代码的节的总大小为0x00561000h字节
SizeOfInitializedData 00000130 Dword 0023E000 运行平台为Intel 所有初始化的数据的节的总大小为0x0023E000h字节
SizeOfUninitializedData 00000134 Dword 00000000 所有未初始化的数据的节的大小,没有未初始化的数据
AddressOfEntryPoint 00000138 Dword 004916D1 程序执行入口的RVA为0x004916D1h
BaseOfCode 0000013C Dword 00001000 代码的节起始RVA为0x1000h
BaseOfData 00000140 Dword 00562000 数据段起始地址的RVA为0x562000h
ImageBase 00000144 Dword 00400000 Pe映像的优先装入地址
SectionAlignment 00000148 Dword 00001000 内存中的节对齐粒度为0x1000
FileAlignment 0000014C Dword 00001000 文件中的节对齐粒度为0x1000
MajorOperatingSystemVersion 00000150 word 0004 操作系统的版本号
MinorOperatingSysyemVersion 00000152 word 0000 操作系统的版本号
MajorImageVersion 00000154 word 0000 PE映象的版本号
MinorImageVersion 00000156 word 0000 PE映象的版本号
MajorSubsystemVersion 00000158 word 0004 所需子系统版本号
MinorSubsystemVersion 0000015A word 0000 所需子系统版本号
Win32VersionValue 0000015C Dword 00000000 保留,必须为0
SizeOfImage 00000160 Dword 007A0000 内存中PE映象的大小为0x7A0000h字节
SizeOfHeaders 00000164 Dword 00001000 所有文件头(包括节表)的大小为0x1000h
CheckSum 00000168 Dword 00752ED5 映象文件的校验和
Subsystem 0000016C word 0002 运行该PE文件所需的子系统
DllCharacteristics 0000016E word 0000 不是dll文件不具有dll文件属性
SizeOfStackReserve 00000170 Dword 00217B80 初始化时为线程保留的栈大小为0x217B80字节
SizeOfStackCommit 00000174 Dword 00001000 初始化时线程实际使用的栈大小为0x1000字节
SizeOfHeapReserve 00000178 Dword 00100000 初始化时为进程保留的堆大小为0x100000字节
SizeOfHeapCommit 0000017C Dword 00001000 初始化时进程实际使用的堆大小为0x1000字节
LoaderFlags 00000180 Dword 00000000 保留,必须为0
NumberOfRvaAndSizes 00000184 Dword 00000010 数据目录的项数为16项

5.数据目录项IMAGE_DATA_DIRECTORY

此处输入图片的描述

成员 偏移量 大小 解释
Export Directory RVA 00000188 Dword 00000000 导出表RVA
Export Directory size 0000018C Dword 00000000 导出表大小
Import Directory RVA 00000190 Dword 0064F66C 导入表RVA
Import Directory Size 00000194 Dword 000001A4 导入表大小
Resource Directory RVA 00000198 Dword 00790000 资源表RVA
Resource Directory Size 0000019C Dword 0000F208 资源表大小
Exception Directory RVA 000001A0 Dword 00000000 异常表RVA
Exception Directory Size 000001A4 Dword 00000000 异常表大小
Security Directory RVA 000001A8 Dword 0074D000 安全表RVA
Security Directory Size 000001AC Dword 00001510 安全表大小
Relocation Directory RVA 000001B0 Dword 00000000 重定位表RVA
Relocation Directory Size 000001B4 Dword 00000000 重定位表大小
Debug Directory RVA 000001B8 Dword 005631E0 调试表RVA
Debug Directory Size 000001BC Dword 0000001C 调试表大小
Architecture Directory RVA 000001C0 Dword 00000000 版权表RVA
Architecture Directory Size 000001C4 Dword 00000000 版权表大小
Reserved 000001C8 Dword 00000000 全局指针表RVA
Reserved 000001CC Dword 00000000 全局指针表大小
TLS Directory RVA 000001D0 Dword 005D755C 线程本地存储RVA
TLS Directory Size 000001D4 Dword 00000018 线程本地存储大小
Configuration Directory RVA 000001D8 Dword 00000000 加载配置表RVA
Configuration Directory Size 000001DC Dword 00000000 加载配置表大小
Bound Import Directory RVA 000001E0 Dword 00000000 綁定导入表RVA
Bound Import Directory Size 000001E4 Dword 00000000 绑定导入表大小
Import Address Table Directory RVA 000001EC Dword 00562000 IAT表RVA
Import Address Table Directory Size 000001EC Dword 00000DDC IAT表大小
Delay Import Directory RVA 000001F0 Dword 0064F5BC 延迟导入表RVA
Delay Import Directory Size 000001F4 Dword 00000040 延迟导入表大小
.NET MetaData Directory RVA 000001F8 Dword 00000000 .NET MetaData表RVA
.NET MetaData Directory Size 000001FC Dword 00000000 .NET MetaData表大小

巴拉巴拉

发博遇见一个小bug,求教大神,大神分分钟搞定,不秒秒钟,感谢感谢,膜拜膜拜!!!! 这个行业真的闪闪惹人爱!!!考期了,加油干QoQ

只有自己去体会写博客才能切身感受到这些热爱分享的人的高贵品质!!!大爱大爱!