欢迎来到天天文库
浏览记录
ID:40566088
大小:546.50 KB
页数:21页
时间:2019-08-04
《PE结构详解(64位和32位的差别)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1基本概念下表描述了贯穿于本文中的一些概念:名称描述地址是“虚拟地址”而不是“物理地址”。为什么不是“物理地址”呢?因为数据在内存的位置经常在变,这样可以节省内存开支、避开错误的内存位置等的优势。同时用户并不需要知道具体的“真实地址”,因为系统自己会为程序准备好内存空间的(只要内存足够大)镜像文件包含以EXE文件为代表的“可执行文件”、以DLL文件为代表的“动态链接库”。为什么用“镜像”?这是因为他们常常被直接“复制”到内存,有“镜像”的某种意思。看来西方人挺有想象力的哦^0^RVA英文全称RelativelyVirtualAddress。
2、偏移(又称“相对虚拟地址”)。相对镜像基址的偏移。节节是PE文件中代码或数据的基本单元。原则上讲,节只分为“代码节”和“数据节”。VA英文全称VirtualAddress。基址2概览x86都是32位的,IA-64都是64位的。64位Windows需要做的只是修改PE格式的少数几个域。这种新的格式被称为PE32+。它并没有增加任何新域,仅从PE格式中删除了一个域。其余的改变就是简单地把某些域从32位扩展到64位。在大部分情况下,你都能写出同时适用于32位和64位PE文件的代码。EXE文件与DLL文件的区别完全是语义上的。它们使用的是相同的PE
3、格式。惟一的不同在于一个位,这个位用来指示文件应该作为EXE还是DLL。甚至DLL文件的扩展名也完全也是人为的。你可以给DLL一个完全不同的扩展名,例如.OCX控件和控制面板小程序(.CPL)都是DLL。图1解释了MicrosoftPE可执行文件格式:PE文件总体上分为“头”和“节”。“头”是“节”的描述、简化、说明,“节”是“头”的具体化。3文件头PE文件的头分为DOS头、NT头、节头。注意,这是本人的分法,在此之前并没有这种分法。这样分法会更加合理,更易理解。因为这三个部分正好构成SizeOfHeaders所指的范围,所以将它们合为“头
4、”。这里的3个头与别的文章的头的定义会有所区别。节头紧跟在NT头后面。3.1DOS头(PE文件签名的偏移地址就是大小)用记事本打开任何一个镜像文件,其头2个字节必为字符串“MZ”,这是MarkZbikowski的姓名缩写,他是最初的MS-DOS设计者之一。然后是一些在MS-DOS下的一些参数,这些参数是在MS-DOS下运行该程序时要用到的。在这些参数的末尾也就是文件的偏移0x3C(第60字节)处是是一个4字节的PE文件签名的偏移地址。该地址有一个专用名称叫做“E_lfanew”。这个签名是“PE00”(字母“P”和“E”后跟着两个空字节)。
5、紧跟着E_lfanew的是一个MS-DOS程序。那是一个运行于MS-DOS下的合法应用程序。当可执行文件(一般指exe、com文件)运行于MS-DOS下时,这个程序显示“ThisprogramcannotberuninDOSmode(此程序不能在DOS模式下运行)”这条消息。用户也可以自己更改该程序,有些还原软件就是这么干的。同时,有些程序既能运行于DOS又能运行于Windows下就是这个原因。Notepad.exe整个DOS头大小为224个字节,大部分不能在DOS下运行的Win32文件都是这个值。MS-DOS程序是可有可无的,如果你想使文
6、件大小尽可能的小可以省掉MS-DOS程序,同时把前面的参数都清0。3.2NT头(244或260个字节)紧跟着PE文件签名之后,是NT头。NT头分成3个部分,因为第2部分在32与64位系统里有区别,第3部分虽然也是头,但实际很不像“头”。第1部分(20个字节)偏移大小英文名中文名描述02Machine机器数标识CPU的数字。参考3.2.1节“机器类型”。22NumberOfSections节数节的数目。Windows加载器限制节的最大数目为96。44TimeDateStamp时间/日期标记UTC时间1970年1月1日00:00起的总秒数的低3
7、2位,它指出文件何时被创建。88已经废除162SizeOfOptionalHeader可选头大小第2部分+第3部分的总大小。这个大小在32位和64位文件中是不同的。对于32位文件来说,它是224;对于64位文件来说,它是240。182FillCharacteristics文件特征值指示文件属性的标志。参考3.2.2节“特征”。第2部分(96或112个字节)偏移大小英文名中文名描述02Magic魔数这个无符号整数指出了镜像文件的状态。0x10B表明这是一个32位镜像文件。0x107表明这是一个ROM镜像。0x20B表明这是一个64位镜像文件。
8、21MajorLinkerVersion链接器的主版本号链接器的主版本号。31MinorLinkerVersion链接器的次版本号链接器的次版本号。44SizeOfCode代码节
此文档下载收益归作者所有