UNIX 目标文件初探

Unix(R) 系统中运行的程序遵守一种称为目标文件格式的精心设计 。了解更多关于目标文件格式的内容,以及可以用来研究系统中目标文件的工具 。
计算机编程的最新技术将一种特殊的人性与一组特殊的工具结合在一起,用以生产出对其他人非常有帮助的一种神奇的产品,即软件 。计算机程序员是一群注重细节的人,他们可以处理计算机中各种各样的困难 。计算机的要求非常苛刻,并且不能容忍其中存在任何的偏差 。毫无疑问,无论您的个性如何以及在工作中使用了何种辅助工具,计算机程序的编写都是非常困难的 。
在 UNIX?和 Linux?中,任何事物都是文件 。您可以认为,UNIX 和 Linux 编程实际上是编写处理各种文件的代码 。系统由许多类型的文件组成,但目标文件具有一种特殊的设计,提供了灵活和多样的用途 。
目标文件是包含带有附加地址和值的助记符号的路线图 。这些符号可以用来对各种代码段和数据段进行命名,包括经过初始化的和未初始化的 。它们也可以用来定位嵌入的调试信息,就像语义 Web,非常适合由程序进行阅读 。
行业工具
【UNIX 目标文件初探】计算机编程中使用的工具包括代码编辑器,如 vi 或 EMacs,您可以使用这些工具输入和编辑希望计算机在完成所需任务时执行的指令,以及编译器和连接器,它们可以生成真正实现这些目标的机器代码 。
高级的工具,称为集成调试环境 (IDE),它以统一的外观集成了不同工具的功能 。IDE 使得编辑器、编译器、连接器和调试器之间的界限变得很模糊 。因此,为了更深入地研究和了解系统,在使用集成的套件之前,最好先单独地使用这些工具 。(注意:IDE 也通常被称为集成开发环境 。)
编译器可以将您在代码编辑器中创建的文本转换为目标文件 。最初,目标文件被称为代码的中间表示形式,因为它用作连接编辑器(即连接器)的输入,而连接编辑器最终完成整个任务并生成可执行的程序作为输出 。
从代码到可执行代码的转换过程经过了良好的定义并实现了自动化,而目标文件是这个链中有机的连接性环节 。在这个转换过程中,目标文件作为连接编辑器所使用的映象,使得它们能够解析各种符号并将不同的代码和数据段连接在一起形成统一的整体 。
历史
计算机编程领域中存在许多著名的目标文件格式 。Dos 系列包括 COM、OBJ 和 EXE 格式 。Unix 和 Linux 使用 a.out、COFF 和 ELF 。Microsoft?Windows?使用可移植的执行文件 (PE) 格式,而 Macintosh 使用 PEF、Mach-O 和其他文件格式 。
最初,各种类型的计算机具有自己独特的目标文件格式,但随着 UNIX 和其他在不同硬件平台上提供可移植性的操作系统的出现,一些常用的文件格式上升为通用的标准 。其中包括 a.out、COFF 和 ELF 格式 。
要了解目标文件,需要一组可以读取目标文件中不同部分并以更易于读取的格式显示这些内容的工具 。本文将讨论这些工具中比较重要的方面 。但首先,您必须创建一个工作台,并在其中建立一个研究对象 。
工作台
启动一个 xterm 会话,让我们先创建一个空白的工作台,并开始对目标文件进行研究 。下面的命令创建了一个目录,可以将目标文件放到该目录中进行研究:
cd
mkdir src
cd src
mkdir hw
cd hw
然后,使用您最喜欢的代码编辑器,在 $HOME/src/hw 目录中输入清单 1 中的程序,并命名为 hw.c 。
清单 1. hw.c 程序#include
int main(void)
{
 printf("Hello World!
");
 return 0;
}
要使用 UNIX 工具库中提供的各种工具,可以将这个简单的“Hello World程序作为研究的对象 。您将学习构建和查看目标文件的输出,而不是使用任何快捷方法直接创建可执行文件(的确有许多这样的快捷方法) 。

推荐阅读