Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

建立名称空间

运行时链接程序将动态可执行文件与其依赖项绑定时,会生成链接映射的链接列表,用于对此应用程序进行说明。链接映射结构说明了应用程序中的每个目标文件。/usr/include/sys/link.h 中定义了此链接映射结构。绑定应用程序的目标文件所需的符号搜索机制会遍历此链接映射的列表。此链接映射列表用于提供应用程序符号解析的名称空间

运行时链接程序也通过链接映射来进行说明。此链接映射以不同于应用程序目标文件列表的列表中进行维护。因此,运行时链接程序驻留在其自己唯一的名称空间中,从而可防止应用程序查看或直接访问运行时链接程序内的任意服务。因此,应用程序只能通过 libc.so.1libdl.so.1 提供的过滤器来访问运行时链接程序。

/usr/include/link.h 中定义了两个标识符,用于定义应用程序和运行时链接程序的链接映射列表:

#define LM_ID_BASE      0     /* application link-map list */
#define LM_ID_LDSO      1     /* runtime linker link-map list */

除了这两个标准的链接映射列表以外,运行时链接程序还允许再创建任意数量的链接映射列表。其中每个链接映射列表都提供一个唯一的名称空间。rtld-audit 接口使用自己的用于维护审计库的链接映射列表。因此,在应用程序的符号绑定要求中,不涉及审计库。针对每个 rtld-audit 支持库会指定一个唯一的新链接映射标识符。

审计库可以使用 dlmopen(3C) 检查应用程序链接映射列表。将 dlmopen()RTLD_NOLOAD 标志结合使用时,审计库可以在不装入目标文件的情况下查询该目标文件是否存在。