链接程序和库指南

建立名称空间

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

运行时链接程序也通过链接映射来进行说明。此链接映射以不同于应用程序目标文件列表的列表中进行维护。因此,运行时链接程序驻留在其自己唯一的名称空间中,从而可防止以任何方式将应用程序直接绑定到运行时链接程序内的服务。应用程序只能通过过滤器 libc.so.1libdl.so.1 调用运行时链接程序的公共服务。

rtld-audit 接口使用自己的用于维护审计库的链接映射列表。因此,在应用程序的的符号绑定要求中,不涉及审计库。通过 dlmopen(3C) 可检查应用程序链接映射列表。将 RTLD_NOLOAD 标志用于 dlmopen(3C) 时,审计库可以在不装入目标文件的情况下查询此目标文件是否存在。

/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 支持库会指定一个唯一的新链接映射标识符。