Syminfo 表节
syminfo 节包含多个类型为 Elf32_Syminfo 或 Elf64_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 重定位中。
|
|