跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 链接程序和库指南 Oracle Solaris 11.1 Information Library (简体中文) |
除了主输出目标文件之外,Solaris 链接编辑器还可以生成一个或多个辅助目标文件。辅助目标文件包含通常写入到主目标文件中的不可分配节。生成辅助目标文件后,主目标文件和所有关联的辅助目标文件将包含 SHT_SUNW_ancillary 节,该节包含用于标识这些相关目标文件的信息。这些目标文件中任何一个的辅助节都提供了标识和解释组的其他成员所需的信息。
此节包含以下结构的数组。请参见 sys/elf.h。
typedef struct { Elf32_Word a_tag; union { Elf32_Word a_val; Elf32_Addr a_ptr; } a_un; } Elf32_Ancillary; typedef struct { Elf64_Xword a_tag; union { Elf64_Xword a_val; Elf64_Addr a_ptr; } a_un; } Elf64_Ancillary;
对于此类型的每个目标文件,a_tag 都控制着 a_un 的解释。
这些目标文件表示具有各种解释的整数值。
这些目标文件表示程序虚拟地址。
存在以下辅助标记。
表 12-11 ELF 辅助数组标记
|
标记辅助节组的结尾。
在 c_val 元素中提供文件的校验和。当 ANC_SUNW_CHECKSUM 位于第一个 ANC_SUNW_MEMBER 实例之前时,它将提供将从中读取辅助节的目标文件的校验和。如果它位于 ANC_SUNW_MEMBER 标记之后,则它将提供该成员的校验和。
指定目标文件名称。a_ptr 元素包含以空字符结尾的字符串的字符串表偏移,该偏移提供文件名称。
辅助节中必须始终在第一个 ANC_SUNW_MEMBER 实例(标识当前目标文件)之前包含一个 ANC_SUNW_CHECKSUM。在其之后,针对构成完整目标文件集合的每个目标文件,都应当有一个 ANC_SUNW_MEMBER。每个 ANC_SUNW_MEMBER 之后都应当跟有该目标文件的 ANC_SUNW_CHECKSUM。因此,典型辅助节的结构如下所示。
|
因此,目标文件可以通过将初始 ANC_SUNW_CHECKSUM 与其之后的每一个进行比较,直到找到匹配项,来标识其自己。