- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深度探索win32可执行文件格式
深度探索win32 可执行文件格式
Matt Pietrek 翻译:姜庆东
摘要: 对可执行文件的深入认识将带你深入到系统深处。如果你知道你的 exe/dll 里是些
什么东东,你就是一个更有知识的程序员。作为系列文章的第一章,将关注这几年来PE 格
式的变化,同时也简单介绍一下PE 格式。经过这次更新,作者加入了PE 格式是如何与.NET
协作的及PE 文件表格(PE FILE SECTIONS ),RVA,The DataDirectory, 函数的输入等内容。
一
很久以前,我给Microsoft Systems Journal( ? ? ? MSDN) 写了一篇名为“Peering Inside the PE:
A Tour of the Win32 Portable Executable File Format, “的文章,后来比我期望的还流行,到现在
我还听说有人在用它 (它还在MSDN 里)。不幸的是,那篇文章的问题依旧存在,WIN32
的世界静悄悄地变了好多,那篇文章已显得过期了。从这个月开始我将用这两篇文章来弥补。
你可能会问为什么我应当了解 PE 格式,答案依旧:操作系统的可执行文件格式和数据
结构暴露出系统的底层细节。通过了解这些,你的程序将编的更出色。
当然,你可以阅读微软的文档来了解我将要告诉你的。但是,像很多文档一样,‘宁可
晦涩,但为瓦全‘。
我把焦点放在提供一些不适合放在正式文档里的内容。另外,这篇文章里的一些知识不见得
能在官方文档里找到。
1. 裂缝的撕开。
让我给你一些从 1994 年我写那篇文章来 PE 格式变化的例子。WIN16 已经成为历史,
也就没有必要作什么比较和说明了。另外一个可憎的东西就是用在 WINDOWS 3.1 中的
WIN32S,在它上面运行程序是那么的不稳定。
那时候,WINDOWS 95 (也叫Chicago)还没有发行。NT 还是3.5 版。微软的
连接器还没开始大规模的优化,尽管如此,there were MIPS and DEC Alpha implementations
of Windows NT that added to the story.
那么究竟,这么些年来,有些什么新的东西出来呢?64 位的WINDOWS 有了它
自己的PE 变种,WINDOWS CE 支持各种CPU 了,各种优化如DLL 的延迟载入,
节表的合并,动态捆绑等也已出台。
有很多类似的东西发生了。
让我们最好忘了。NET。它是如何与系统切入的呢?对于操作系统,.NET 的可执
行文件格式是与旧的PE 格式兼容的。虽然这么说,在运行时期,.NET 还是按元数据
和中间语言来组织数据的,这毕竟是它的核心。这篇文章当中,我将打开.NET 元数据
这扇门,但不做深入讨论。
如果WIN32 的这些变化都不足以让我重写这篇文章,就是原来的那些错误也让我汗
颜。比如我对TLS 的描述只是一带而过,我对时间戳的描述只有你生活在美国西部才行等
等。还有,一些东西已是今是作非了,我曾说过.RDATA 几乎没排上用场,今天也是,我还
说过.IDATA 节是可读可写的,但是一些搞API 拦截的人发现好像是错的。
在更新这篇文章的过程当中,我也检查了 PEDUMP 这个用来倾印 PE 文件的程序.这
个程序能够在0X86 和IA-64 平台下编译和运行。
2. PE 格式概览
微软的可执行文件格式,也就是大家熟悉的PE 格式,是官方文档的一部分。但是,它
是从VAX/VMS ? ? COFF 派生出来的,就WINDOWS NT 小组的大部分是从DEC 转过来
的看来,这是可以理解的。很自然,这些人在NT 的开发上会用他们以往的代码。
采用术语’PORTABLE EXECUTABLE’是因为微软希望有一个通用在所有 WINDOWS
平台上和所有CPU 上的文件格式。从大的方面讲,这个目标已经实现。它适用于NT 及其
后代,95 及其后代,和CE.
微软产生的OBJ 文件是用COFF 格式的。当你看到它的很多域都是用八进制的编码的,
你会发现她是多么古老了。COFF OBJ 文件用到了很多
原创力文档


文档评论(0)