ELF 提供了一个目标文件框架,用于支持多个处理器、多种数据编码和多类计算机。要支持此目标文件系列,文件的初始字节应指定解释文件的方式。这些字节与发出查询的处理器以及文件的其余内容无关。
ELF 头和目标文件的初始字节对应于 e_ident 成员。
表 12-3 ELF 标识索引
|
这些索引可访问值为以下各项的字节。
4 字节魔数,用于将文件标识为 ELF 目标文件,如下表中所列。
|
字节 e_ident[EI_CLASS] 用于标识文件的类或容量,如下表中所列。
|
文件格式设计用于在各种大小的计算机之间进行移植,而不会将最大计算机的大小强加给最小的计算机。文件类定义目标文件容器的数据结构所使用的基本类型。包含在目标文件各节中的数据可以遵循其他编程模型。
类 ELFCLASS32 支持文件和虚拟地址空间最高为 4 GB 的计算机。该类使用表 12-1 中定义的基本类型。
类 ELFCLASS64 保留用于 64 位体系结构,如 64 位 SPARC 和 x64。该类使用表 12-2 中定义的基本类型。
字节 e_ident[EI_DATA] 用于指定目标文件中特定于处理器的数据的数据编码,如下表中所列。
|
数据编码一节中提供了有关这些编码的更多信息。其他值保留供将来使用。
字节 e_ident[EI_VERSION] 用于指定 ELF 头版本号。当前,该值必须为 EV_CURRENT。
字节 e_ident[EI_OSABI] 用于标识操作系统以及目标文件所面向的 ABI。其他 ELF 结构中的一些字段包含的标志和值具有特定于操作系统或 ABI 的含义。这些字段的解释由此字节的值确定。
字节 e_ident[EI_ABIVERSION] 用于标识目标文件所面向的 ABI 的版本。此字段用于区分 ABI 的各个不兼容版本。此版本号的解释依赖于 EI_OSABI 字段标识的 ABI。如果没有为对应于处理器的 EI_OSABI 字段指定值,或者没有为 EI_OSABI 字节的特定值所确定的 ABI 指定版本值,则会使用值零来表示未指定值。
该值用于标记 e_ident 中未使用字节的起始位置。这些字节会保留并设置为零。读取目标文件的程序应忽略这些值。