- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows NT 3.1 入了一种名为 PE 文件格式的新可执行文件格式。PE 文件格
式的规范包含在了 MSDN 的CD 中(Specs and Strategy, Specifications, Windows
NT File Format Specifications ),但是它非常之晦涩。
然而这一的文档并未提供足够的信息,所以开发者们无法很好地弄懂 PE
格式。本文旨在解决这一问题,它会对整个的 PE 文件格式作一个十分彻底的解
释,另外,本文中还带有对所有必需结构的描述以及示范如何使用这些信息的源
码示例。
为了获得 PE 文件中所包含的重要信息,我编写了一个名为 PEFILE.DLL 的
动态链接库,本文中所有出现的源码示例亦均摘自于此。这个 DLL 和它的源代
码都作为 PEFile 示例程序的一部分包含在了 CD 中(译注:示例程序请在 MSDN
中寻找,本站恕不提供),你可以在你自己的应用程序中使用这个 DLL ;同样,
你亦可以依你所愿地使用并构建它的源码。在本文末尾,你会找到 PEFILE.DLL
的函数导出列表和一个如何使用它们的说明。我觉得你会发现这些函数会让你从
容应付 PE 文件格式的。
介绍
Windows 操作系统家族最近增加的Wi ndows NT 为开发环境和应用程序本
身带来了很大的改变,这之中一个最为重大的当属 PE 文件格式了。新的 PE 文
件格式主要来自于 UNIX 操作系统所通用的 COFF 规范,同时为了保证与旧版本
MS-DOS 及 Windows 操作系统的兼容,PE 文件格式也保留了 MS-DOS 中那熟悉
的 MZ 头部。
在本文之中,PE 文件格式是以自顶而下的顺序解释的。在你从头开始研究
文件内容的过程之中,本文会详细讨论 PE 文件的每一个组成部分。
许多单独的文件成分定义都来自于 Microsoft Win32 SDK 开发包中的
WINNT.H 文件,在这个文件中你会发现用来描述文件头部和数据目录等各种成
分的结构类型定义。但是,在WINNT.H 中缺少对 PE 文件结构足够的定义,在
这种情况下,我定义了自己的结构来存取文件数据。你会在 PEFILE.DLL 工程的
PEFILE.H 中找到这些结构的定义,整套的 PEFILE.H 开发文件包含在 PEFile 示例
程序之中。
本文配套的示例程序除了 PEFILE.DLL 示例代码之外,还有一个单独的
Win32 示例应用程序,名为 EXEVIEW.EXE 。创建这一示例目的有二:首先,我
需要测试 PEFILE.DLL 的函数,并且某些情况要求我同时查看多个文件;其次,
很多解决 PE 文件格式的工作和直接观看数据有关。例如,要弄懂导入地址名称
表是如何构成的,我就得同时查看.idata 段头部、导入映像数据目录、可选头部
以及当前的.idata 段实体,而 EXEVIEW.EXE 就是查看这些信息的最佳示例。
闲话少叙,让我们开始吧。
PE 文件结构
PE 文件格式被组织为一个线性的数据流,它由一个 MS-DOS 头部开始,接
着是一个是模式的程序残余以及一个 PE 文件标志,这之后紧接着 PE 文件头和
可选头部。这些之后是所有的段头部,段头部之后跟随着所有的段实体。文件的
结束处是一些其它的区域,其中是一些混杂的信息,包括重分配信息、符号表信
息、行号信息以及字串表数据。我将所有这些成分列于图 1。
图 1.PE 文件映像结构
从 MS-DOS 文件头结构开始,我将按 PE 文件格式各成分的出现顺序依
次对其进行讨论,并且讨论的大部分是以示例代码为基础来示范如何获得文件的
信息的。所有的源码均摘自 PEFILE.DLL 模块的 PEFILE.C 文件。这些示例都利用
了Windows NT 最酷的特色之一 内存映射文件,这一特色允许用户使用一个
简单的指针来存取文件中所包含的数据,因此所有的示例都使用了内存映射文件
来存取 PE 文件中的数据。
注意:请查阅本文末尾关于如何使用 PEFILE.DLL 的那一段。
MS-DOS 头部/实模式头部
如上所述,PE 文件格式的第一个组成部分是 MS-DOS 头部。在 PE 文件格
式中,它并非一个新概念,因为它与 MS-DOS 2.0 以来就已有的 MS-DOS 头部是
完全一样的。保留这个相同结构的最主要原因是,当你尝试在 Windows 3.1 以
下或 MS-D
文档评论(0)