学习电脑,计算机系统故障维护,电脑技术,电脑知识学习-就上第二电脑网
当前位置: 首页 > 电脑知识 > 电脑基础

老电脑的硬盘PE 与COFF OBJ 文件格式

 更新时间: 2019-07-23 10:15:23   作者:第二电脑网   来源:第二电脑网   浏览数:438   我要评论

PE 与COFF OBJ 文件格式一个操作系统的可执行文件格式,从许多角度来看,都是操作系统内建行为的一面镜子。虽然可执行档格式通常并不是一个程序员认为迫切需要学习的东西,但操作

PE 与COFF OBJ 文件格式

一个操作系统的可执行文件格式,从许多角度来看,都是操作系统内建行为的一面镜子。

虽然可执行档格式通常并不是一个程序员认为迫切需要学习的东西,但操作系统的许多

有用的知识却可以在这个过程中获得。动态联结、加载器行为、以及内存管理,是特

别容易在这个学习过程中推理而得的三个主题。

在这一章,我要带你走一趟真正的旅游 -- 游览 Portable Executable 文件格式。PE 档是

微软设计用于其所有 Win32 位操作系统(Windows NT 、Windows 95 、Win32s )的可

执行档格式。

你或许会惊讶为什么我要在这本书中涵盖这一章,毕竟在Microsoft Developer Network

CD-ROM 之中已有数篇相关文章。主要的原因是,PE 文件中的结构,同时也是 Windows

95 的关键性数据结构。例如,Windows 95 把 PE 档的表头段(header section )映像到

内存中,并以之表示一个被加载的模块。为了了解 Windows 95 的核心如何工作,你

需要了解PE 格式。就是这么简单!

我探讨 PE 文件的另一个理由是,就像所有出自于微软的文件一样,微软的 PE 文件彷

佛假设你已经和 PE 文件融为一体,因此它非常地不够充份,不够详细。我这一章的目

标是要补充那些文件,并且把它和你每天的经验关联在一起。沿着这样的方向,我会展

示 PE 文件影响操作系统的各种方式。

在可见的未来,PE 格式将在微软的操作系统(包括 Cairo )中扮演一个吃重的角色。甚

至即使你使用 Visual C++ 在 Windows 3.1 中开发程序,你还是要使用PE 文件(因为

Visual C++ 的 32 位 DOS 扩充组件也是使用这种格式)。如果你打算在 Windows 95

内设计任何层面的系统程序,PE 格式的知识更是不可或缺。

在讨论 PE 格式的过程中,我不打算费劲地显示无穷无尽的hex dump (16 位倾印码),

然后解释个别位的重要性(译注)。取而代之的是,我要解释内嵌在其中的观念,并

把它和你每天的 Win32 程序经验关联起来。例如,线程区域变量(thread local variable )

的概念就几乎把我逼疯,直到我了解它是如何精致优雅地在可执行档中实作出来。由于

许多Win32 程序员拥有 Win16 背景,我会想办法让 PE 格式与其 16 位兄弟(NE 格

式)尽量产生一些关联。

译注:事实上,适当追踪具代表性的16 位倾印码,不但不枯躁(我已经在我所主持 的多次研讨会中验证了这个论点),而且经由「铁证如山」的追踪,我们才能从模模糊 糊的视野中解脱出来。我将在我自己的新书中详细解剖 PE 文件格式。

在微软引入这个可执行档格式的同时,它也引入了一个新的目标模块(object module )格

式和函数库(library )格式。这些格式由新的编译器和组译器产生。新的 LIB 格式基本

上只不过是一群 OBJ 档绑在一起,再加上一些索引。所以当我说 OBJ 档时,我说的是

COFF OBJ 和 LIB 档。这些新的 OBJ 和 LIB 格式分享了 PE 格式的许多观念。直到

最近,都还没有公开可用的信息,介绍微软的 OBJ 和 LIB 档。甚至在我下笔的时刻,

资料都还很缺乏。所以,把 OBJ 和 LIB 文件格式也涵盖进来是值得的。

大家都知道,Windows NT (第一个 Win32 操作系统)有 VAX VMS 和 UNIX 的血统。

NT 开发小组中的许多关键人物在进入微软之前就是在那些平台上设计并写码。当他们

开始设计 NT ,很自然地他们会想到使用过去写过并且测试过的工具。那些工具所产生

的可执行档以及目标模块(object module )的格式称为COFF (Common Object File

Format )。

COFF 格式本身已有良好的基础,但还需要扩充以满足现代操作系统如 Windows NT 的

需要。更新的结果就是 PE (Portable Executable )格式。称为可移植性(portable )是因

为任何机器(Intel 386 、MIPS 、Alpha 、Power PC 等等)上的 NT 都可以使用相同的可

执行档格式。当然啦,CPU 指令的二进制编码是完全不同的,你不可能把一个在 MIPS 机

器编译好的 PE 文件拿到 Intel 系统来跑。重要的是,程序加载器以及程序开发工具不需

要针对每一个新的操作系统重写。

微软对于 Windows NT 的高度企图心可以从一件事获得证明:它放弃了自己原有的32 位

元工具和文件格式。Windows 3.x 的虚拟装置驱动程序(VxDs )就是以不同的 32 位

文件布局(LE 格式)呈现,而它早在 NT 跳上舞台之前就出现了。由于 Windows 的
更多:老电脑的硬盘PE 与COFF OBJ 文件格式
https://www.002pc.com/diannaojichu/135.html

你可能感兴趣的文件格式,OBJ,COFF,PE

关于我们 - 广告合作 - 联系我们 - 免责声明 - 网站地图 - 投诉建议 - 在线投稿

  浙ICP备140365454号

©CopyRight 2008-2020 002pc.COM Inc All Rights Reserved. 第二电脑网 版权所有 联系QQ:282523118