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
只有自己去体会写博客才能切身感受到这些热爱分享的人的高贵品质!!!大爱大爱!