JavaScript is required to for searching.
跳过导航链接
退出打印视图
链接程序和库指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分使用链接编辑器和运行时链接程序

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

3.  运行时链接程序

4.  共享目标文件

第 2 部分快速参考

5.  链接编辑器快速参考

第 3 部分高级主题

6.  直接绑定

7.  生成目标文件以优化系统性能

8.  mapfile

9.  接口和版本控制

10.  使用动态字符串标记建立依赖性

11.  可扩展性机制

第 4 部分ELF 应用程序二进制接口

12.  目标文件格式

文件格式

数据表示形式

ELF 头

ELF 标识

数据编码

节合并

特殊节

COMDAT 节

组节

功能节

散列表节

移动节

注释节

重定位节

重定位计算

SPARC: 重定位

SPARC: 重定位类型

64 位 SPARC: 重定位类型

x86: 重定位

32 位 x86: 重定位类型

x64: 重定位类型

字符串表节

符号表节

符号值

符号表布局和约定

符号排序节

寄存器符号

Syminfo 表节

版本控制节

版本定义章节

版本依赖性节

版本符号节

13.  程序装入和动态链接

14.  线程局部存储

第 5 部分附录

A.  链接程序和库的更新及新增功能

B.  System V 发行版 4(版本 1)mapfile

索引

Syminfo 表节

syminfo 节包含多个类型为 Elf32_SyminfoElf64_Syminfo 的项。.SUNW_syminfo 节中包含与关联符号表 (sh_link) 中的每一项对应的项。

如果目标文件中存在此节,则可通过采用关联符号表的符号索引,并使用该索引在此节中查找对应的 Elf32_Syminfo 项或 Elf64_Syminfo 项,从而找到其他符号信息。关联的符号表和 Syminfo 表的项数将始终相同。

索引 0 用于存储 Syminfo 表的当前版本,即 SYMINFO_CURRENT。由于符号表项 0 始终保留用于 UNDEF 符号表项,因此该用法不会造成任何冲突。

Syminfo 项具有以下格式。请参见 sys/link.h

typedef struct {
        Elf32_Half      si_boundto;
        Elf32_Half      si_flags;
} Elf32_Syminfo;

typedef struct {
        Elf64_Half      si_boundto;
        Elf64_Half      si_flags;
} Elf64_Syminfo;
si_boundto

.dynamic 节中某项的索引,由 sh_info 字段标识,该字段用于扩充 Syminfo 标志。例如,DT_NEEDED 项标识与 Syminfo 项关联的动态目标文件。以下各项是 si_boundto 的保留值。

名称
含义
SYMINFO_BT_SELF
0xffff
符号与自身绑定。
SYMINFO_BT_PARENT
0xfffe
符号与父级绑定。父级是指导致此动态目标文件被装入的第一个目标文件。
SYMINFO_BT_NONE
0xfffd
符号没有任何特殊的符号绑定。
SYMINFO_BT_EXTERN
0xfffc
符号定义是外部的。
si_flags

此位字段可以设置标志,如下表所示。

名称
含义
SYMINFO_FLG_DIRECT
0x01
符号引用与包含定义的目标文件直接关联。
SYMINFO_FLG_FILTER
0x02
符号定义可用作标准过滤器。
SYMINFO_FLG_COPY
0x04
符号定义通过副本重定位生成。
SYMINFO_FLG_LAZYLOAD
0x08
符号引用应延迟装入的目标文件。
SYMINFO_FLG_DIRECTBIND
0x10
符号引用应与定义直接绑定。
SYMINFO_FLG_NOEXTDIRECT
0x20
不允许将外部引用与此符号定义直接绑定。
SYMINFO_FLG_AUXILIARY
0x40
符号定义可用作辅助过滤器。
SYMINFO_FLG_INTERPOSE
0x80
符号定义可用作插入项。此属性仅适用于动态可执行文件。
SYMINFO_FLG_CAP
0x100
符号与功能相关联。
SYMINFO_FLG_DEFERRED
0x200
符号不应包含在 BIND_NOW 重定位中。