[关闭]
@xiaohaizi 2023-03-06T08:41:42.000000Z 字数 3319 阅读 94

ELF

GNU


Book1 Executable and Linking Format (ELF)

目标文件(Object Files)

介绍

本章描述了目标文件格式—— ELF(Executable and Linking Format)。有3种类型的目标文件:

有汇编器和link editor创建的目标文件直接在CPU上执行的程序的二进制表示。

文件格式

目标文件参与:
- 程序链接(构建一个程序)
- 程序执行(运行一个程序)

image_1gqlnmpnj1urlt0h1ijr29m1s789.png-34.3kB

ELF头(ELF Header):在文件的开头,包含描述文件组织的“路线图”。

节(Section):包含了从链接视角出发的大量信息:指令、数据、符号表,重定位信息等等。

段(Segment):主要用于执行视角。

程序头表(Program Header Table):如果存在的话,说明了如何构建进程image。用于构建进程image的文件必须包含程序头表;可冲定位文件不需要。

节头表(Section Header Table):包含节的描述信息,每个Section都有在这个表中有一个Entry。链接期间用到的文件必须包含一个节头表,其他文件可能有也可能没有。

小贴士:


尽管图中显示了ELF Header后边紧接着Program Header Table,而且Section Header Table被放在多个Section的后面,实际上可能不这么放。此外,节和段没有特定的顺序。只有ELF Header在文件中有固定的位置。

数据表示

目标文件格式支持各种处理器架构,从8位到32位都支持。因此,目标文件以一种独立于机器的格式表示控制数据,使得以一种通用的方式识别目标文件并解释其内容成为可能。目标文件的剩余数据使用目标处理器的编码,而不管文件是在什么机器上创建的。

image_1gqlp30liaou1t4q123mafv1qotm.png-45.3kB

目标文件定义的所有数据结构“自然”大小和对其准则。

字符表示

ELF Header

image_1gqmc7ievdeu499193gj6oggc13.png-60kB

各字段含义:

ELF Identification

ELF提供了一个目标文件框架,来支持多处理器,多数据编码,以及多类机器。为实现这个目标文件族,ELF文件的初始字节指定了如何解释文件。

image_1gqmf1rcd1rt619auilv1ivuth22n.png-50.4kB

其中:

Sections

目标文件的Section header Table可以让我们定位该目标文件中的所有节。

Section header Table是一个 Elf32_Shdr结构的数组。

部分Section header Table的下标被保留;目标文件没有这些特殊下标部分:

image_1gqnooh6hq7ftufu1t1fsp149v4o.png-33.6kB

目标文件的节满足几个条件:

一个section header 具有如下所示的结构:

image_1gqnq0bi34gi1kaat9hg8gt8u55.png-47.1kB

sh_type指明了section的语义。

image_1gqnq28va1ujo1pgeeapvvm15f95i.png-53.7kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注