Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

ELF 标识

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

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

表 12-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_MAG0 - EI_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 的计算机。该类使用Table 12–1 中定义的基本类型。

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

EI_DATA

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

名称
含义
ELFDATANONE
0
无效数据编码
ELFDATA2LSB
1
请参见Figure 12–2
ELFDATA2MSB
2
请参见Figure 12–3

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

EI_VERSION

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

EI_OSABI

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

名称
含义
ELFOSABI_NONE / ELFOSABI_SYSV
0
无扩展或未指定
ELFOSABI_SOLARIS
6
Solaris
EI_ABIVERSION

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

EI_PAD

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