链接程序和库指南

ELF 标识

ELF 提供了一个目标文件框架,用于支持多个处理器、多种数据编码和多类计算机。要支持此目标文件系列,文件的初始字节应指定解释文件的方式。这些字节与发出查询的处理器以及文件的其余内容无关。

ELF 头和目标文件的初始字节对应于 e_ident 成员。

表 7–3 ELF 标识索引

名称 

值 

目的 

EI_MAG0

0

文件标识 

EI_MAG1

1

文件标识 

EI_MAG2

2

文件标识 

EI_MAG3

3

文件标识 

EI_CLASS

4

文件类 

EI_DATA

5

数据编码 

EI_VERSION

6

文件版本 

EI_OSABI

7

操作系统/ABI 标识

EI_ABIVERSION

8

ABI 版本

EI_PAD

9

填充字节的开头 

EI_NIDENT

16

e_ident[] 的大小

这些索引可访问值为以下各项的字节。

EI_MAG0EI_MAG3

4 字节魔数,用于将文件标识为 ELF 目标文件,如下表中所列。

名称 

值 

位置 

ELFMAG0

0x7f

e_ident[EI_MAG0]

ELFMAG1

'E'

e_ident[EI_MAG1]

ELFMAG2

'L'

e_ident[EI_MAG2]

ELFMAG3

'F'

e_ident[EI_MAG3]

EI_CLASS

字节 e_ident[EI_CLASS] 用于标识文件的类或容量,如下表中所列。

名称 

值 

含义 

ELFCLASSNONE

0

无效类 

ELFCLASS32

1

32 位目标文件 

ELFCLASS64

2

64 位目标文件 

文件格式设计用于在各种大小的计算机之间进行移植,而不会将最大计算机的大小强加给最小的计算机。文件类可定义目标文件容器的数据结构所使用的基本类型。包含在目标文件各节中的数据可以遵循其他编程模型。

ELFCLASS32 支持文件和虚拟地址空间最高为 4 GB 的计算机。该类使用表 7–1 中定义的基本类型。

ELFCLASS64 保留用于 64 位体系结构,如 64 位 SPARC 和 x64。该类使用表 7–2 中定义的基本类型。

EI_DATA

字节 e_ident[EI_DATA] 用于指定目标文件中特定于处理器的数据的数据编码,如下表中所列。

名称 

值 

含义 

ELFDATANONE

0

无效数据编码 

ELFDATA2LSB

1

请参见图 7–2

ELFDATA2MSB

2

请参见图 7–3

数据编码一节中提供了有关这些编码的更多信息。其他值保留供将来使用。

EI_VERSION

字节 e_ident[EI_VERSION] 用于指定 ELF 头版本号。当前,该值必须为 EV_CURRENT

EI_OSABI

字节 e_ident[EI_OSABI] 用于标识操作系统以及目标文件所面向的 ABI。其他 ELF 结构中的一些字段包含的标志和值具有特定于操作系统或 ABI 的含义。这些字段的解释由此字节的值确定。

EI_ABIVERSION

字节 e_ident[EI_ABIVERSION] 用于标识目标文件所面向的 ABI 的版本。此字段用于区分 ABI 的各个不兼容版本。此版本号的解释依赖于 EI_OSABI 字段标识的 ABI。如果没有为对应于处理器的 EI_OSABI 字段指定值,或者没有为 EI_OSABI 字节的特定值所确定的 ABI 指定版本值,则会使用值零来表示未指定的值。

EI_PAD

该值用于标记 e_ident 中未使用字节的起始位置。这些字节会保留并设置为零。读取目标文件的程序应忽略这些值。