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