PE结构详解(64位和32位的差别)(2)

2019-02-14 22:52

0x1d3 Matsushita AM33处理器 0x8664 x64处理器 0x1c0 ARM小尾处理器 0xebc EFI字节码处理器 0x14c Intel 386或后继处理器及其兼容处理器 0x200 Intel Itanium处理器 0x9041 Mitsubishi M32R小尾处理器 0x266 MIPS16处理器 0x366 带FPU的MIPS处理器 0x466 带FPU的MIPS16处理器 0x1f0 PowerPC小尾处理器 0x1f1 带符点运算支持的PowerPC处理器 0x166 MIPS小尾处理器 0x1a2 Hitachi SH3处理器 0x1a3 Hitachi SH3 DSP处理器 0x1a6 Hitachi SH4处理器 0x1a6 Hitachi SH5处理器 0x1c2 Thumb处理器 0x169 MIPS小尾WCE v2处理器 3.2.2 特征 Characteristics域包含镜像文件属性的标志。以下加粗的是常用的属性。当前定义了以下值(由低位往高位): 位置 0 1 2 3 4 5 6 保留,必须为0。 7 8 9 10 11 机器类型基于32位体系结构。 调试信息已经从此镜像文件中移除。 应用程序可以处理大于2GB的地址。 保留,必须为0。 描述 它表明此文件不包含基址重定位信息,因此必须被加载到其首选基地址上。如果基地址不可用,加载器会报错。 它表明此镜像文件是合法的。看起来有点多此一举,但又不能少。 如果此镜像文件在可移动介质上,完全加载它并把它复制到交换文件中。几乎不用 如果此镜像文件在网络介质上,完全加载它并把它复制到交换文件中。几乎不用 12 13 14 15 此镜像文件是系统文件,而不是用户程序。 此镜像文件是动态链接库(DLL)。 此文件只能运行于单处理器机器上。 保留,必须为0。 Windows子系统

为NT头第2部分的Subsystem域定义了以下值以确定运行镜像所需的Windows子系统(如果存在):

值 0 未知子系统 描述 1 设备驱动程序和Native Windows进程 2 Windows图形用户界面(GUI)子系统(一般程序) 3 Windows字符模式(CUI)子系统(从命令提示符启动的) 7 Posix字符模式子系统 9 Windows CE 10 可扩展固件接口(EFI)应用程序 11 带引导服务的EFI驱动程序 12 带运行时服务的EFI驱动程序 13 EFI ROM镜像 14 XBOX DLL特征

为NT头的DllCharacteristics域定义了以下值:

位置 1 2 描述 保留,必须为0。 3 4 5 6 7 8 9 10 11 官方文档缺失 官方文档缺失 DLL可以在加载时被重定位。 强制进行代码完整性校验。 镜像兼容于NX。 可以隔离,但并不隔离此镜像。 不使用结构化异常(SE)处理。 12 13 14 15 16 不绑定镜像。 保留,必须为0。 WDM驱动程序。 官方文档缺失 可以用于终端服务器。 每个数据目录给出了Windows使用的表或字符串的地址和大小。这些数据目录项全部被被加载进内存以备系统运行时使用。数据目录是按照如下格式定义的一个8字节结构: typedef struct

DWORD VirtualAddress; //数据的RVA DWORD Size; //数据的大小 typedef ENDS

第1个域——VirtualAddress,实际上是表的RVA。相对镜像基址偏移地址。NT头第2部分的ImageBase 第2个域给出了表的大小(以字节计)。数据目录组成了NT头的最后一部分。

Certificate Table域指向属性证书表。它的第一个域是一个文件指针,而不是通常的RVA。

3.3 节头

在镜像文件中,每个节的RVA值必须由链接器决定。这样能够保证这些节位置相邻且按升序排列,并且这些RVA值必须是NT头中SectionAlignment域的倍数。 每个节头(节表项)格式如下,共40个字节:

偏移 大小 英文名 描述 这是一个8字节ASCII编码的字符串,不足8字节时用NULL填充,必须使其达到8字节。0 8 Name 如果它正好是8字节,那就没有最后的NULL字符。可执行镜像不支持长度超过8字节的节名。 当加载进内存时这个节的总大小。如果此值比SizeOfRawData大,那么多出的部分用0填充。8 12 16 4 4 4 VirtualSize VirtualAddress SizeOfRawData 这是节的数据在没有进行对齐处理前的实际大小,不需要内存对齐。 内存中节相对于镜像基址的偏移。必须是SectionAlignment的整数倍。 磁盘文件中已初始化数据的大小。它必须是NT头中FileAlignment域的倍数。当节中仅包含未初始化的数据时,这个域应该为0。 节中数据起始的文件偏移。它必须是NT头中FileAlignment域的倍数。当节中仅包含未初始20 24 28 32 4 4 4 2 PointerToRawData 化的数据时,这个域应该为0。 PointerToRelocations 重定位项开头的文件指针。对于可执行文件或没有重定位项的文件来说,此值应该为0。 已经废除。 NumberOfRelocations 节中重定位项的个数。对于可执行文件或没有重定位项的文件来说,此值应该为0。 34 36 2 4 已经废除。 Characteristics 描述节特征的标志。参考“节标志”。 3.3.1 节标志 节头中的Characteristics标志指出了节的属性。(以下加粗的是常用的属性值) 位置 描述 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 已经废除 21 22 23 24 25 26 27 28 29 此节包含扩展的重定位信息。 此节可以在需要时被丢弃。 此节不能被缓存。 此节不能被交换到页面文件中。 此节可以在内存中共享。 此节包含通过全局指针(GP)来引用的数据。 已经废除 此节包含可执行代码。代码段才用“.text” 此节包含已初始化的数据。“.data” 此节包含未初始化的数据。“.bss” 已经废除 30 31 32 此节可以作为代码执行。 此节可读。(几乎都设置此节) 此节可写。 第25标志表明节中重定位项的个数超出了节头中为每个节保留的16位所能表示的范围(也就是65535个函数)。如果设置了此标志并且节头中的NumberOfRelocations域的值是0xffff,那么实际的重定位项个数被保存在第一个重定位项的VirtualAddress域(32位)中。如果设置了第25标志但节中的重定位项的个数少于0xffff,则表示出现了错误。

4 一些注意信息

1.PE头是怎么计算的?

SizeOfHeaders所指的头是从文件的第1个字节开始算起的,而不是从PE标记开始算起的。快速的计算方法是从文件的偏移0x3C(第59字节)处获得一个4字节的PE文件签名的偏移地址,这个偏移地址就是本文所定义的DOS头的大小。NT头在32位系统是244字节,在64位系统是260字节。节头的大小由NT头的第1部分的NumberOfSections(节的数量)*40字节(每个节头是40字节)得出。如此,DOS头、NT头、节头3个头的大小加起来并向上舍入为FileAlignment(文件对齐)的正整数倍的最小值就是SizeOfHeaders(头大小)值。 2.节数量的问题

Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。没有规定节头必须以全0结构结束。所以加载器使用了双重标准——全0、达到NumberOfSections数量就不再搜索了。 3.未初始化问题

①未初始化数据在文件中是不占空间的,但在内存里还是会占空间的,它们依然依据指定的大小存在内存里。所以说未初始化数据只在文件大小上有优势,在内存里与已初始化数据是一样的。

②未初始化数据的方法有2种:1是通过节头的VirtualSize>SizeOfRawData。未初始化数据的大小就是

VirtualSize-SizeOfRawData的值。2是节特征的标志置为“此节包含未初始化的数据”,这时SizeOfUninitializedData才会非0。现在 都使用第1种,把它们集成到.data里面可以加快速度。 4.已初始化问题

数据目录里面所对应的块中除了属性证书表、调试信息和几个废除的目录项外,全都属于SizeOfInitializedData(已初始化数据大小)范围。当然,已初始化数据不只这些,还可以是常见的代码段等等。 5.节对齐的问题

如果NT头的SectionAlignment域的值小于相应操作系统(有些资料说是根据CPU来的,这不一定。因为CPU本身就允许改分页大小,只是大部分时候操作系统是用CPU默认值的。x86平台默认页面大小是4K。IA-64平台默认页面大小是8K。MIPS平台默认页面大小是4K。Itanium平台默认页面大小是8K。)平台的页面大小,那


PE结构详解(64位和32位的差别)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中级基础知识真题集

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: