文档详情

【翻译】可移植的可执行文件格式全接触(附注释)技术分析.doc

发布:2016-04-25约4.58万字共36页下载文档
文本预览下载声明
标 题: 【翻译】可移植的可执行文件格式全接触(附注释) 作 者: ah007 时 间: 2006-03-20,21:21:01 链 接: /showthread.php?t=22892 PE文件格式系列译文之二 ????????????【翻译】可移植的可执行文件格式全接触(附注释) ??????(The?Portable?Executable?File?Format?from?Top?to?Bottom) =================================================================== 原著:Randy?Kath?(微软开发者网络技术组) 翻译:ah007(沈忠平) 【说明:本译文的所有大小标题序号都是译者添加,以方便大家阅读。圆圈内的数字是注释的编号,注释全部译自网络。另外,本系列译文之一中已有的注释这里就不再重复了。所有注释仅供参考,如有不妥之处,敬请原谅!译者】 一、摘要 Windows?NT?3.1版操作系统引进了一种叫做可移植的可执行(PE)文件格式的新文件格式。尽管《可移植的可执行文件格式规范》的内容相当含糊,但公众已可得到了;并且它也已被包括在我们的微软开发者网络CD(其中的:Windows?NT文件格式规范-规范-规范和战略)当中。 不过,对开发者来说,仅此规范一文并不足以提供足够的信息来让他们对PE文件格式的理解变得容易,哪怕是更合理一点。本文档的目的就是用来解决这个问题的。从本文档之中,你可找到整个PE文件格式的完整的解释,还有所有必须的结构体的描述以及演示怎样使用这个信息的源代码例子。 出现在本文中的所有源代码例子都是从一个叫PEFILE.DLL的动态链接库中例举出来的。我写出这个DLL的目的就是为了发现包含在一个PE文件中的重要信息。这个DLL和它的源代码也被包含在这个CD当中作为PE文件例子程序的一部分;你可以自由地将这个DLL使用在你自己的应用程序之中。同样,你也可以自由地取得这些源代码并在它的基础之上为你的任何目的去构建(程序)。在本文的末尾,你会找到一个从PEFILE.DLL中导出的简短的函数列表,以及怎样使用它们的解释。我想,你会发现利用这些函数会让你对PE文件格式的理解要容易一些。 二、介绍 最近Windows操作系统的家族得到了微软reg;Windows?NT操作系统的加入给开发环境带来了很多的变化,并且也给应用程序本身带来了不小的变化。比较重要的变化之一就是对可移植的可执行(PE)文件格式的引入。新的PE文件格式主要源自于UNIX操作系统常用的COFF(Common?Object?File?Format,通用目标文件格式)规范。不过,为了保持对以前各版的MS-DOSreg;和?Windows操作系统的兼容性,PE文件格式也保留了大家过去比较熟悉的MS-DOS的MZ头。 在本文中,PE文件格式将使用从头到尾的方式来解释。文中将依照你通读文件的内容时文件的每个组成部分出现的顺序来一一讨论它们,开始时是头部并沿着你曾走过的路线全程直到结束。 许多单个的文件组成部分的定义来自于WINNT.H文件中,这是一个包含在Windows?NT的微软Win32?软件开发工具箱(SDK)中的文件。在这个文件中,你能找到被用来表示文件中各个组成部分、每个文件头和数据目录等的结构类型定义。而其他方面,在文件中WINNT.H缺少对文件结构的足够的定义。在这些方面,我决定定义我自己的、能被用来访问文件数据的新结构。你将会发现这些结构被定义在PEFILE.H文件中,而这个文件就是用来建立PEFILE.DLL的。全套的PEFILE.DLL开发文件包含在PEFILE实例应用这一节中。 作为PEFILE.DLL实例代码的补充,伴随此文的还有一个单独的、名为EXEVIEW.EXE的基于Win32的实例程序。此实例的建立基于以下两个目的:第一,我需要一种能检验PEFILE.DLL功能的方法,在一些情况下这种检验要求同时能查看多个文件也就是说多重查看的支持。第二,领会PE文件格式的许多工作都和能交互地看见数据有关。例如,要搞清输入地址名字表是怎样的结构,我得同时查看.idata节的节头、输入映象文件的数据目录、可选头、以及实际的.idata节的节身等等。EXEVIEW.EXE就是查看上述信息的最佳人选。 不再罗嗦,我们马上开始。 三、PE文件的结构 PE文件格式被组织为一个线性的数据流。开始的是MS-DOS头,然后是实模式的程序根,再就是PE文件签名,紧随其后的便是PE文件头和可选头。在这之后,出现的是所有的节头,再跟着的就是所有节的节身。文件常以一些其它方面的杂项信息,包括重定位信息、符号表信息、行数信息以及字串表数据等作为结尾。所有这些都
显示全部
相似文档