JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 链接程序和库指南     Oracle Solaris 11.1 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.  目标文件格式

13.  程序装入和动态链接

程序头

基本地址

段权限

段内容

程序装入(特定于处理器)

程序的解释程序

运行时链接程序

动态节

全局偏移表(特定于处理器)

过程链接表(特定于处理器)

32 位 SPARC: 过程链接表

64 位 SPARC: 过程链接表

32 位 x86: 过程链接表

x64: 过程链接表

14.  线程局部存储

第 5 部分附录

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

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

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

动态节

如果目标文件参与动态链接,则其程序头表将包含一个类型为 PT_DYNAMIC 的元素。此段包含 .dynamic 节。特殊符号 _DYNAMIC 用于标记包含以下结构的数组的节。请参见 sys/link.h

typedef struct {
        Elf32_Sword d_tag;
        union {
                Elf32_Word      d_val;
                Elf32_Addr      d_ptr;
                Elf32_Off       d_off;
        } d_un;
} Elf32_Dyn;

typedef struct {
        Elf64_Xword d_tag;
        union {
                Elf64_Xword     d_val;
                Elf64_Addr      d_ptr;
        } d_un;
} Elf64_Dyn;

对于此类型的每个目标文件,d_tag 将控制 d_un 的解释。

d_val

这些目标文件表示具有各种解释的整数值。

d_ptr

这些目标文件表示程序虚拟地址。在执行过程中,文件虚拟地址可能与内存虚拟地址不匹配。对动态结构中包含的地址进行解释时,运行时链接程序会根据原始文件值和内存基本地址来计算实际地址。为确保一致性,文件不应包含用于更正动态结构中的地址的重定位项。

通常,每个动态标记的值决定了 d_un 联合的解释。借助此约定,第三方工具可进行更简单的动态标记解释。值为偶数的标记表示使用 d_ptr 的动态节项。值为奇数的标记表示使用 d_val 的动态节项,或表示该标记既不使用 d_ptr 也不使用 d_val。值包含在以下特殊兼容性范围中的标记不遵循这些规则。第三方工具必须逐项明确处理这些例外范围。

下表概述了可执行文件和共享目标文件的标记要求。如果某标记带有强制标志,则动态链接数组必须包含此类型的项。同样,可选表示该标记的项可以出现但不是必需的。

表 13-8 ELF 动态数组标记

名称
d_un
可执行文件
共享目标文件
DT_NULL
0
已忽略
强制
强制
DT_NEEDED
1
d_val
可选的
可选的
DT_PLTRELSZ
2
d_val
可选的
可选的
DT_PLTGOT
3
d_ptr
可选的
可选的
DT_HASH
4
d_ptr
强制
强制
DT_STRTAB
5
d_ptr
强制
强制
DT_SYMTAB
6
d_ptr
强制
强制
DT_RELA
7
d_ptr
强制
可选的
DT_RELASZ
8
d_val
强制
可选的
DT_RELAENT
9
d_val
强制
可选的
DT_STRSZ
10
d_val
强制
强制
DT_SYMENT
11
d_val
强制
强制
DT_INIT
12
d_ptr
可选的
可选的
DT_FINI
13
d_ptr
可选的
可选的
DT_SONAME
14
d_val
已忽略
可选的
DT_RPATH
15
d_val
可选的
可选的
DT_SYMBOLIC
16
已忽略
已忽略
可选的
DT_REL
17
d_ptr
强制
可选的
DT_RELSZ
18
d_val
强制
可选的
DT_RELENT
19
d_val
强制
可选的
DT_PLTREL
20
d_val
可选的
可选的
DT_DEBUG
21
d_ptr
可选的
已忽略
DT_TEXTREL
22
已忽略
可选的
可选的
DT_JMPREL
23
d_ptr
可选的
可选的
DT_BIND_NOW
24
已忽略
可选的
可选的
DT_INIT_ARRAY
25
d_ptr
可选的
可选的
DT_FINI_ARRAY
26
d_ptr
可选的
可选的
DT_INIT_ARRAYSZ
27
d_val
可选的
可选的
DT_FINI_ARRAYSZ
28
d_val
可选的
可选的
DT_RUNPATH
29
d_val
可选的
可选的
DT_FLAGS
30
d_val
可选的
可选的
DT_ENCODING
32
未指定
未指定
未指定
DT_PREINIT_ARRAY
32
d_ptr
可选的
已忽略
DT_PREINIT_ARRAYSZ
33
d_val
可选的
已忽略
DT_MAXPOSTAGS
34
未指定
未指定
未指定
DT_LOOS
0x6000000d
未指定
未指定
未指定
DT_SUNW_AUXILIARY
0x6000000d
d_ptr
未指定
可选的
DT_SUNW_RTLDINF
0x6000000e
d_ptr
可选的
可选的
DT_SUNW_FILTER
0x6000000e
d_ptr
未指定
可选的
DT_SUNW_CAP
0x60000010
d_ptr
可选的
可选的
DT_SUNW_SYMTAB
0x60000011
d_ptr
可选的
可选的
DT_SUNW_SYMSZ
0x60000012
d_val
可选的
可选的
DT_SUNW_ENCODING
0x60000013
未指定
未指定
未指定
DT_SUNW_SORTENT
0x60000013
d_val
可选的
可选的
DT_SUNW_SYMSORT
0x60000014
d_ptr
可选的
可选的
DT_SUNW_SYMSORTSZ
0x60000015
d_val
可选的
可选的
DT_SUNW_TLSSORT
0x60000016
d_ptr
可选的
可选的
DT_SUNW_TLSSORTSZ
0x60000017
d_val
可选的
可选的
DT_SUNW_CAPINFO
0x60000018
d_ptr
可选的
可选的
DT_SUNW_STRPAD
0x60000019
d_val
可选的
可选的
DT_SUNW_CAPCHAIN
0x6000001a
d_ptr
可选的
可选的
DT_SUNW_LDMACH
0x6000001b
d_val
可选的
可选的
DT_SUNW_CAPCHAINENT
0x6000001d
d_val
可选的
可选的
DT_SUNW_CAPCHAINSZ
0x6000001f
d_val
可选的
可选的
DT_SUNW_PARENT
0x60000021
d_val
可选的
可选的
DT_SUNW_ASLR
0x60000023
d_val
可选的
已忽略
DT_HIOS
0x6ffff000
未指定
未指定
未指定
DT_VALRNGLO
0x6ffffd00
未指定
未指定
未指定
DT_CHECKSUM
0x6ffffdf8
d_val
可选的
可选的
DT_PLTPADSZ
0x6ffffdf9
d_val
可选的
可选的
DT_MOVEENT
0x6ffffdfa
d_val
可选的
可选的
DT_MOVESZ
0x6ffffdfb
d_val
可选的
可选的
DT_POSFLAG_1
0x6ffffdfd
d_val
可选的
可选的
DT_SYMINSZ
0x6ffffdfe
d_val
可选的
可选的
DT_SYMINENT
0x6ffffdff
d_val
可选的
可选的
DT_VALRNGHI
0x6ffffdff
未指定
未指定
未指定
DT_ADDRRNGLO
0x6ffffe00
未指定
未指定
未指定
DT_CONFIG
0x6ffffefa
d_ptr
可选的
可选的
DT_DEPAUDIT
0x6ffffefb
d_ptr
可选的
可选的
DT_AUDIT
0x6ffffefc
d_ptr
可选的
可选的
DT_PLTPAD
0x6ffffefd
d_ptr
可选的
可选的
DT_MOVETAB
0x6ffffefe
d_ptr
可选的
可选的
DT_SYMINFO
0x6ffffeff
d_ptr
可选的
可选的
DT_ADDRRNGHI
0x6ffffeff
未指定
未指定
未指定
DT_RELACOUNT
0x6ffffff9
d_val
可选的
可选的
DT_RELCOUNT
0x6ffffffa
d_val
可选的
可选的
DT_FLAGS_1
0x6ffffffb
d_val
可选的
可选的
DT_VERDEF
0x6ffffffc
d_ptr
可选的
可选的
DT_VERDEFNUM
0x6ffffffd
d_val
可选的
可选的
DT_VERNEED
0x6ffffffe
d_ptr
可选的
可选的
DT_VERNEEDNUM
0x6fffffff
d_val
可选的
可选的
DT_LOPROC
0x70000000
未指定
未指定
未指定
DT_SPARC_REGISTER
0x70000001
d_val
可选的
可选的
DT_AUXILIARY
0x7ffffffd
d_val
未指定
可选的
DT_USED
0x7ffffffe
d_val
可选的
可选的
DT_FILTER
0x7fffffff
d_val
未指定
可选的
DT_HIPROC
0x7fffffff
未指定
未指定
未指定
DT_NULL

标记 _DYNAMIC 数组的结尾。

DT_NEEDED

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于提供所需依赖项的名称。动态数组可以包含多个此类型的项。尽管这些项与其他类型的项的关系不重要,但其相对顺序却很重要。请参见共享目标文件依赖项

DT_PLTRELSZ

与过程链接表关联的重定位项的总大小(以字节为单位)。请参见过程链接表(特定于处理器)

DT_PLTGOT

与过程链接表或全局偏移表关联的地址。请参见过程链接表(特定于处理器)全局偏移表(特定于处理器)

DT_HASH

符号散列表的地址。该表引用 DT_SYMTAB 元素指示的符号表。请参见散列表节

DT_STRTAB

字符串表的地址。运行时链接程序所需的符号名称、依赖项名称和其他字符串位于该表中。请参见字符串表节

DT_SYMTAB

符号表的地址。请参见符号表节

DT_RELA

重定位表的地址。请参见重定位节

目标文件可以有多个重定位节。为可执行文件或共享目标文件创建重定位表时,链接编辑器会连接这些节以形成一个表。尽管这些节在目标文件中可以保持独立,但运行时链接程序将看到一个表。运行时链接程序为可执行文件创建进程映像或将共享目标文件添加到进程映像中时,运行时链接程序将会读取该重定位表并执行关联操作。

此元素要求同时存在 DT_RELASZDT_RELAENT 元素。如果某个文件必须重定位,则可以存在 DT_RELA DT_REL 中的一个。

DT_RELASZ

DT_RELA 重定位表的总大小(以字节为单位)。

DT_RELAENT

DT_RELA 重定位项的大小(以字节为单位)。

DT_STRSZ

DT_STRTAB 字符串表的总大小(以字节为单位)。

DT_SYMENT

DT_SYMTAB 符号项的大小(以字节为单位)。

DT_INIT

初始化函数的地址。请参见初始化节和终止节

DT_FINI

终止函数的地址。请参见初始化节和终止节

DT_SONAME

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于标识共享目标文件的名称。请参见记录共享目标文件名称

DT_RPATH

以空字符结尾的库搜索路径字符串的 DT_STRTAB 字符串表偏移。此元素的用途已被 DT_RUNPATH 取代。请参见运行时链接程序搜索的目录

DT_SYMBOLIC

表示目标文件包含在其链接编辑过程中应用的符号绑定。此元素已被 DF_SYMBOLIC 标志取代。请参见使用 -B symbolic 选项

DT_REL

DT_RELA 类似,但其表中包含隐式加数。此元素要求同时存在 DT_RELSZDT_RELENT 元素。

DT_RELSZ

DT_REL 重定位表的总大小(以字节为单位)。

DT_RELENT

DT_REL 重定位项的大小(以字节为单位)。

DT_PLTREL

表示过程链接表指向的重定位项的类型(DT_RELDT_RELA)。过程链接表中的所有重定位都必须使用相同的重定位项。请参见过程链接表(特定于处理器)。此元素要求同时存在 DT_JMPREL 元素。

DT_DEBUG

用于调试。

DT_TEXTREL

表示一个或多个重定位项可能会要求修改非可写段,并且运行时链接程序可以相应地进行准备。此元素已被 DF_TEXTREL 标志取代。请参见与位置无关的代码

DT_JMPREL

与过程链接表单独关联的重定位项的地址。请参见过程链接表(特定于处理器)。通过分隔这些重定位项,运行时链接程序可在装入启用了延迟绑定的目标文件时忽略这些项。此元素要求同时存在 DT_PLTRELSZDT_PLTREL 元素。

DT_POSFLAG_1

应用于紧邻的 DT_ 元素的各种状态标志。请参见表 13-11

DT_BIND_NOW

表示在将控制权返回给程序之前,必须处理此目标文件的所有重定位项。通过环境或 dlopen(3C) 指定此项时,提供的此项优先于使用延迟绑定的指令。此元素的用途已被 DF_BIND_NOW 标志取代。请参见执行重定位的时间

DT_INIT_ARRAY

初始化函数的指针数组的地址。此元素要求同时存在 DT_INIT_ARRAYSZ 元素。请参见初始化节和终止节

DT_FINI_ARRAY

终止函数的指针数组的地址。此元素要求同时存在 DT_FINI_ARRAYSZ 元素。请参见初始化节和终止节

DT_INIT_ARRAYSZ

DT_INIT_ARRAY 数组的总大小(以字节为单位)。

DT_FINI_ARRAYSZ

DT_FINI_ARRAY 数组的总大小(以字节为单位)。

DT_RUNPATH

以空字符结尾的库搜索路径字符串的 DT_STRTAB 字符串表偏移。请参见运行时链接程序搜索的目录

DT_FLAGS

特定于此目标文件的标志值。请参见表 13-9

DT_ENCODING

大于或等于 DT_ENCODING、小于或等于 DT_LOOS 的动态标记值遵循 d_un 联合的解释规则。

DT_PREINIT_ARRAY

预初始化函数的指针数组的地址。此元素要求同时存在 DT_PREINIT_ARRAYSZ 元素。仅在可执行文件中处理该数组。如果该数组包含在共享目标文件中,则会被忽略。请参见初始化节和终止节

DT_PREINIT_ARRAYSZ

DT_PREINIT_ARRAY 数组的总大小(以字节为单位)。

DT_MAXPOSTAGS

正动态数组标记值的数量。

DT_LOOS - DT_HIOS

此范围内包含的值(包括这两个值)保留用于特定于操作系统的语义。所有这类值都遵循 d_un 联合的解释规则。

DT_SUNW_AUXILIARY

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于逐符号指定一个或多个辅助 filtee。请参见生成辅助过滤器

DT_SUNW_RTLDINF

保留供运行时链接程序内部使用。

DT_SUNW_FILTER

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于逐符号指定一个或多个标准 filtee。请参见生成标准过滤器

DT_SUNW_CAP

功能节的地址。请参见功能节

DT_SUNW_SYMTAB

符号表的地址,其中包含用于扩充 DT_SYMTAB 所提供的符号的局部函数符号。这些符号始终在紧邻 DT_SYMTAB 所提供的符号之前的位置。请参见符号表节

DT_SUNW_SYMSZ

DT_SUNW_SYMTABDT_SYMTAB 提供的符号表的组合大小。

DT_SUNW_ENCODING

大于或等于 DT_SUNW_ENCODING、小于或等于 DT_HIOS 的动态标记值遵循 d_un 联合的解释规则。

DT_SUNW_SORTENT

DT_SUNW_SYMSORTDT_SUNW_TLSSORT 符号排序项的大小(以字节为单位)。

DT_SUNW_SYMSORT

符号表索引数组的地址,这些索引提供对 DT_SUNW_SYMTAB 所引用的符号表中函数和变量符号的排序访问。请参见符号排序节

DT_SUNW_SYMSORTSZ

DT_SUNW_SYMSORT 数组的总大小(以字节为单位)。

DT_SUNW_TLSSORT

符号表索引数组的地址,这些索引提供对 DT_SUNW_SYMTAB 所引用的符号表中线程局部符号的排序访问。请参见符号排序节

DT_SUNW_TLSSORTSZ

DT_SUNW_TLSSORT 数组的总大小(以字节为单位)。

DT_SUNW_CAPINFO

符号表索引数组的地址,这些索引提供符号与其功能要求之间的关联。请参见功能节

DT_SUNW_STRPAD

动态字符串表末尾未使用的保留空间的总大小(以字节为单位)。如果目标文件中不存在 DT_SUNW_STRPAD,则没有保留空间可用。

DT_SUNW_CAPCHAIN

功能系列索引数组的地址。每个索引系列都以 0 项结尾。

DT_SUNW_LDMACH

生成目标文件的链接编辑器的计算机体系结构。DT_SUNW_LDMACH 使用与 ELF 头的 e_machine 字段相同的 EM_ 整数值。请参见ELF 头DT_SUNW_LDMACH 用于标识生成目标文件的链接编辑器的类(32 位或 64 位)和平台。此信息不会用于运行时链接程序,而仅用于说明目的。

DT_SUNW_CAPCHAINENT

DT_SUNW_CAPCHAIN 项的大小(以字节为单位)。

DT_SUNW_CAPCHAINSZ

DT_SUNW_CAPCHAIN 链的总大小(以字节为单位)。

DT_SUNW_PARENT

以空字符结尾的父目标文件名称的 DT_STRTAB 字符串表偏移。所提供的名称是基名,其中仅包含一个文件名且没有任何路径组件。请参见父目标文件

DT_SUNW_ASLR

特定于此目标文件的地址空间布局和随机化 (ASLR) 标志值。请参见表 13-12

DT_SYMINFO

符号信息表的地址。此元素要求同时存在 DT_SYMINENTDT_SYMINSZ 元素。请参见Syminfo 表节

DT_SYMINENT

DT_SYMINFO 信息项的大小(以字节为单位)。

DT_SYMINSZ

DT_SYMINFO 表的总大小(以字节为单位)。

DT_VERDEF

版本定义表的地址。该表中的元素包含字符串表 DT_STRTAB 的索引。此元素要求同时存在 DT_VERDEFNUM 元素。请参见版本定义章节

DT_VERDEFNUM

DT_VERDEF 表中的项数。

DT_VERNEED

版本依赖性表的地址。该表中的元素包含字符串表 DT_STRTAB 的索引。此元素要求同时存在 DT_VERNEEDNUM 元素。请参见版本依赖性节

DT_VERNEEDNUM

DT_VERNEEDNUM 表中的项数。

DT_RELACOUNT

表示 RELATIVE 重定位计数,该计数是通过串联所有 Elf32_RelaElf64_Rela 重定位项生成的。请参见组合重定位节

DT_RELCOUNT

表示 RELATIVE 重定位计数,该计数是通过串联所有 Elf32_Rel 重定位项生成的。请参见组合重定位节

DT_AUXILIARY

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于指定一个或多个辅助 filtee。请参见生成辅助过滤器

DT_FILTER

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于指定一个或多个标准 filtee。请参见生成标准过滤器

DT_CHECKSUM

目标文件中选定的节的简单校验和。请参见 gelf_checksum(3ELF)

DT_MOVEENT

DT_MOVETAB 移动项的大小(以字节为单位)。

DT_MOVESZ

DT_MOVETAB 表的总大小(以字节为单位)。

DT_MOVETAB

移动表的地址。此元素要求同时存在 DT_MOVEENTDT_MOVESZ 元素。请参见移动节

DT_CONFIG

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于定义配置文件。该配置文件仅在可执行文件中有意义,并且通常是特定于此目标文件的。请参见配置缺省搜索路径

DT_DEPAUDIT

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于定义一个或多个审计库。请参见运行时链接程序审计接口

DT_AUDIT

以空字符结尾的字符串的 DT_STRTAB 字符串表偏移,用于定义一个或多个审计库。请参见运行时链接程序审计接口

DT_FLAGS_1

特定于此目标文件的标志值。请参见表 13-10

DT_VALRNGLODT_VALRNGHI

此范围内包含的值(包括这两个值)使用动态结构的 d_un.d_val 字段。

DT_ADDRRNGLO - DT_ADDRRNGHI

此范围内包含的值(包括这两个值)使用动态结构的 d_un.d_ptr 字段。如果生成 ELF 目标文件后对其进行了任何调整,则必须相应地更新这些项。

DT_SPARC_REGISTER

DT_SYMTAB 符号表中 STT_SPARC_REGISTER 符号的索引。该符号表中的每个 STT_SPARC_REGISTER 符号都存在一个动态项。请参见寄存器符号

DT_LOPROC - DT_HIPROC

此范围内包含的值(包括这两个值)保留用于特定于处理器的语义。

除动态数组末尾的 DT_NULL 元素以及 DT_NEEDEDDT_POSFLAG_1 元素的相对顺序以外,各项可以采用任何顺序显示。未显示在该表中的标记值为保留值。

表 13-9 ELF 动态标志 DT_FLAGS

名称
含义
DF_ORIGIN
0x1
要求 $ORIGIN 处理
DF_SYMBOLIC
0x2
要求符号解析
DF_TEXTREL
0x4
存在文本重定位项
DF_BIND_NOW
0x8
要求非延迟绑定
DF_STATIC_TLS
0x10
目标文件使用静态线程局部存储方案
DF_ORIGIN

表示目标文件要求 $ORIGIN 处理。请参见查找关联的依赖项

DF_SYMBOLIC

表示目标文件包含在其链接编辑过程中应用的符号绑定。请参见使用 -B symbolic 选项

DF_TEXTREL

表示一个或多个重定位项可能会要求修改非可写段,并且运行时链接程序可以相应地进行准备。请参见与位置无关的代码

DF_BIND_NOW

表示在将控制权返回给程序之前,必须处理此目标文件的所有重定位项。通过环境或 dlopen(3C) 指定此项时,提供的此项优先于使用延迟绑定的指令。请参见执行重定位的时间

DF_STATIC_TLS

表示目标文件包含使用静态线程局部存储方案的代码。在通过 dlopen(3C) 或延迟装入而动态装入的目标文件中,不能使用静态线程局部存储。

表 13-10 ELF 动态标志 DT_FLAGS_1

名称
含义
DF_1_NOW
0x1
执行完整的重定位处理。
DF_1_GLOBAL
0x2
未使用。
DF_1_GROUP
0x4
表示目标文件是组的成员。
DF_1_NODELETE
0x8
不能从进程中删除目标文件。
DF_1_LOADFLTR
0x10
确保立即装入 filtee。
DF_1_INITFIRST
0x20
首先进行目标文件初始化。
DF_1_NOOPEN
0x40
目标文件不能用于 dlopen(3C)
DF_1_ORIGIN
0x80
要求 $ORIGIN 处理。
DF_1_DIRECT
0x100
已启用直接绑定。
DF_1_INTERPOSE
0x400
目标文件是插入项。
DF_1_NODEFLIB
0x800
忽略缺省的库搜索路径。
DF_1_NODUMP
0x1000
不能使用 dldump(3C) 转储目标文件。
DF_1_CONFALT
0x2000
目标文件是配置替代项。
DF_1_ENDFILTEE
0x4000
filtee 终止过滤器搜索。
DF_1_DISPRELDNE
0x8000
已执行位移重定位。
DF_1_DISPRELPND
0x10000
位移重定位暂挂。
DF_1_NODIRECT
0x20000
目标文件包含非直接绑定。
DF_1_IGNMULDEF
0x40000
内部使用。
DF_1_NOKSYMS
0x80000
内部使用。
DF_1_NOHDR
0x100000
内部使用。
DF_1_EDITED
0x200000
目标文件在最初生成后已被修改。
DF_1_NORELOC
0x400000
内部使用。
DF_1_SYMINTPOSE
0x800000
存在各个符号插入项。
DF_1_GLOBAUDIT
0x1000000
建立全局审核。
DF_1_SINGLETON
0x2000000
存在单件符号。
DF_1_NOW

表示在将控制权返回给程序之前,必须处理此目标文件的所有重定位项。通过环境或 dlopen(3C) 指定时,提供的此标志优先于使用延迟绑定的指令。请参见执行重定位的时间

DF_1_GROUP

表示目标文件是组的成员。此标志通过链接编辑器的 -B group 选项记录在目标文件中。请参见目标文件分层结构

DF_1_NODELETE

表示不能从进程中删除目标文件。如果使用 dlopen(3C) 通过直接或依赖性方式将目标文件装入进程,则无法使用 dlclose(3C) 卸载该目标文件。此标志通过使用链接编辑器的 -z nodelete 选项记录在目标文件中。

DF_1_LOADFLTR

仅对过滤器有意义。表示立即处理所有关联 filtee。此标志通过使用链接编辑器的 -z loadfltr 选项记录在目标文件中。请参见filtee 处理

DF_1_INITFIRST

表示在装入其他任何目标文件之前首先运行此目标文件的初始化节。此标志仅适用于专用系统库,并通过使用链接编辑器的 -z initfirst 选项记录在目标文件中。

DF_1_NOOPEN

表示无法使用 dlopen(3C)将目标文件添加到正在运行的进程。此标志通过使用链接编辑器的 -z nodlopen 选项记录在目标文件中。

DF_1_ORIGIN

表示目标文件要求 $ORIGIN 处理。请参见查找关联的依赖项

DF_1_DIRECT

表示目标文件应使用直接绑定信息。请参见第 6 章

DF_1_INTERPOSE

表示目标文件符号表将在除主装入目标文件(通常为可执行文件)外的所有符号之前插入。通过使用链接编辑器的 -z interpose 选项记录此标志。请参见运行时插入

DF_1_NODEFLIB

表示此目标文件的依赖性搜索会忽略所有缺省的库搜索路径。此标志通过使用链接编辑器的 -z nodefaultlib 选项记录在目标文件中。请参见运行时链接程序搜索的目录

DF_1_NODUMP

表示 dldump(3C) 不转储该目标文件。此选项的替代选项包括没有重定位项的目标文件,这些目标文件可能会包括在使用 crle(1) 生成的替代目标文件中。此标志通过使用链接编辑器的 -z nodump 选项记录在目标文件中。

DF_1_CONFALT

将此目标文件标识为 crle(1) 生成的配置替代目标文件。此标志可触发运行时链接程序来搜索配置文件 $ORIGIN/ld.config.app-name

DF_1_ENDFILTEE

仅对 filtee 有意义。终止对其他任何 filtee 的过滤器搜索。此标志通过使用链接编辑器的 -z endfiltee 选项记录在目标文件中。请参见减少 filtee 搜索

DF_1_DISPRELDNE

表示此目标文件应用了位移重定位。由于位移重定位记录在应用重定位后被丢弃,因此该目标文件中将不再存在这些记录。请参见位移重定位

DF_1_DISPRELPND

表示此目标文件暂挂了位移重定位。由于此目标文件中存在位移重定位,因此可在运行时完成重定位。请参见位移重定位

DF_1_NODIRECT

表示此目标文件包含无法直接绑定的符号。请参见SYMBOL_SCOPE / SYMBOL_VERSION 指令

DF_1_IGNMULDEF

保留供内核运行时链接程序内部使用。

DF_1_NOKSYMS

保留供内核运行时链接程序内部使用。

DF_1_NOHDR

保留供内核运行时链接程序内部使用。

DF_1_EDITED

表示此目标文件在最初由链接编辑器构造后,已被编辑或被修改。此标志用于警告调试器,某个目标文件在最初生成后进行了更改。

DF_1_NORELOC

保留供内核运行时链接程序内部使用。

DF_1_SYMINTPOSE

表示目标文件包含应在除主装入目标文件(通常为可执行文件)外的所有符号之前插入的各个符号。使用 mapfileINTERPOSE 关键字生成目标文件时记录此标志。请参见SYMBOL_SCOPE / SYMBOL_VERSION 指令

DF_1_GLOBAUDIT

表示动态可执行文件要求全局审计。请参见记录全局审计程序

DF_1_SINGLETON

表示目标文件定义或引用 singleton 符号。请参见SYMBOL_SCOPE / SYMBOL_VERSION 指令

表 13-11 ELF 动态位置标志 DT_POSFLAG_1

名称
含义
DF_P1_LAZYLOAD
0x1
标识延迟装入的依赖项。
DF_P1_GROUPPERM
0x2
标识组依赖性。
DF_P1_LAZYLOAD

将以下 DT_NEEDED 项标识为要延迟装入的目标文件。此标志通过使用链接编辑器的 -z lazyload 选项记录在目标文件中。请参见延迟装入动态依赖项

DF_P1_GROUPPERM

将以下 DT_NEEDED 项标识为要作为组装入的目标文件。此标志通过使用链接编辑器的 -z groupperm 选项记录在目标文件中。请参见隔离组

表 13-12 ELF ASLR 值、DT_SUNW_ASLR

名称
含义
DV_SUNW_ASLR_DEFAULT
0
采用系统缺省设置
DV_SUNW_ASLR_DISABLE
1
禁用 ASLR
DV_SUNW_ASLR_ENABLE
2
启用 ASLR

使用链接编辑器的 -z aslr 选项将 DV_SUNW_ASLR_DISABLEDV_SUNW_ASLR_ENABLE 记录在目标文件中。