| elf文件格式-- 1 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-23 23:51:51
|
| elf文件格式-- 1 这份文档和原始的那份ELF文件格式的文档有以下一个不同:
1. 忽略了分页记数 。 2. 因为上述原因,在这篇内容目录中去掉了页号,索引完全被忽略。 (不象Postscript文档,txt文本可以用来搜索) 3. 页标题的内容和文章的页脚已经在开始的时候被换掉了。 4. 文章的排版也已经修正过了。 5. 如果必要,不同的字体已经被忽略了。大部分地方,这片文档能让你 充分的理解。然而,很小的地方,原始的文档使用了斜体字来指出文 章中的字符变量。在那种情况下,本文使用<尖括号>。在原始的文档 中没有出现尖括号。 6. 原始的文档有三个错误,如果你是不经意读它的话,是不会明显 就能找出的。但是在这里,明确的被鉴别出来了。 我很冒昧的纠正了那些错误。在他们的位置用一个做上了标记。 可能还有其他我没有看出来的的错误。
如果有如何其他的区别都是我的责任。这样的错误请 mailto:breadbox@muppetlabs.com.
Brian Raiter [Last edited Fri Jul 23 1999]
________________________________________________________________
EXECUTABLE AND LINKABLE FORMAT (ELF)
Portable Formats Specification, Version 1.1 Tool Interface Standards (TIS)
________________________________________________________________
=========================== Contents 内容===========================
序言 1. OBJECT文件 导言 ELF头(ELF Header) Sections String表(String Table) Symbol表(Symbol Table) 重定位(Relocation) 2. 程序装载与动态连接 导言 Program头(Program Header) Program装载(Program Loading) Dynamic连接(Dynamic Linking) 3. C LIBRARY C Library
________________________________________________________________
导言
________________________________________________________________
ELF: 可执行连接格式
可执行连接格式是UNIX系统实验室(USL)作为应用程序二进制接口 (Application Binary Interface(ABI)而开发和发布的。工具接口标准委 员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操 作系统之间可移植的二进制文件格式。
假定开发者定义了一个二进制接口集合,ELF标准用它来支持流线型的软件 发展。 应该减少不同执行接口的数量。因此可以减少重新编程重新编译的 代码。
关于这片文档
这篇文档是为那些想创建目标文件或者在不同的操作系统上执行文件的开发 着准备的。它分以下三个部分:
* 第一部分, “目标文件Object Files”描述了ELF目标文件格式三种主要 的类型。 * 第二部分, “程序转载和动态连接”描述了目标文件的信息和系统在创建 运行时程序的行为。 * 第三部分, “C 语言库”列出了所有包含在libsys中的符号,标准的ANSI C 和libc的运行程序,还有libc运行程序所需的全局的数据符号。
注意: 参考的X86体系已经被改成了Intel体系。
________________________________________________________________
1. 目标文件(Object file)
________________________________________________________________
========================= 序言 =========================
第一部分描述了iABI的object文件的格式, 被称为ELF(Executable and Linking Format). 在object文件中有三种主要的类型。
* 一个可重定位(relocatable)文件保存着代码和适当的数据,用来和其他的 object文件一起来创建一个可执行文件或者是一个共享文件。 * 一个可执行(executable)文件保存着一个用来执行的程序;该文件指出了 exec(BA_OS)如何来创建程序进程映象。 * 一个共享object文件保存着代码和合适的数据,用来被下面的两个链接器 链接。第一个是连接编辑器[请参看ld(SD_CMD)],可以和其他的可重定位和 共享object文件来创建其他的object。第二个是动态链接器,联合一个 可执行文件和其他的共享object文件来创建一个进程映象。
一个object文件被汇编器和联接器创建, 想要在处理机上直接运行的object 文件都是以二进制来存放的。那些需要抽象机制的程序,比如象shell脚本, 是不被接受的。
在介绍性的材料过后,第一部分主要围绕着文件的格式和关于如何建立程序。 第二部分也描述了object文件的几个组成部分,集中在执行程序所必须的信息上。
文件格式
Object文件参与程序的联接(创建一个程序)和程序的执行(运行一个程序)。 object 文件格式提供了一个方便有效的方法并行的视角看待文件的内容, 在他们的活动中,反映出不同的需要。例 1-1图显示了一个object文件的 组织图。
+ 图1-1: Object文件格式
Linking 视角 Execution 视角 ============ ============== ELF header ELF header Program header table (optional) Program header table Section 1 Segment 1 ... Segment 2 Section n ... Section header table Section header table (optional)
一个ELF头在文件的开始,保存了路线图(road map),描述了该文件的组织情况。 sections保存着object 文件的信息,从连接角度看:包括指令,数据, 符号表,重定位信息等等。特别sections的描述会出项在以后的第一部分。 第二部分讨论了段和从程序的执行角度看文件。
假如一个程序头表(program header table)存在,那么它告诉系统如何来创建一 个进程的内存映象。被用来建立进程映象(执行一个程序)的文件必须要有一个程 序头表(program header table);可重定位文件不需要这个头表。一个 section头表(section header table)包含了描述文件sections的信息。每个 section在这个表中有一个入口;每个入口给出了该section的名字,大小, 等等信息。在联接过程中的文件必须有一个section头表;其他object文件可要 可不要这个section头表。
注意: 虽然图显示出程序头表立刻出现在一个ELF头后,section头表跟着其他 section部分出现,事实是的文件是可以不同的。此外,sections和段(segments) 没有特别的顺序。只有ELF头(elf header)是在文件的固定位置。
数据表示 object文件格式支持8位、32位不同的处理器。不过,它试图努力的在更大 或更小的体系上运行。因此,object文件描绘一些控制数据需要用与机器 无关的格式,使它尽可能的用一般的方法甄别object文件和描述他们的内容。 在object文件中剩余的数据使用目标处理器的编码方式,不管文件是在哪台 机子上创建的。
+ 图 1-2: 32-Bit Data Types
Name Size Alignment Purpose ==== ==== ========= ======= Elf32_Addr 4 4 Unsigned program address Elf32_Half 2 2 Unsigned medium integer
[1] [2] [3] [4] [5] [6] 下一页
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 欢迎大家在此讨论有关linux的话题。 下一篇文章: elf文件格式-- 2 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |