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.  运行时链接程序

共享目标文件依赖项

查找共享目标文件依赖项

运行时链接程序搜索的目录

配置缺省搜索路径

动态字符串标记

重定位处理

重定位符号查找

缺省符号查找

运行时插入

执行重定位的时间

重定位错误

装入其他目标文件

延迟装入动态依赖项

提供 dlopen() 的替代项

初始化和终止例程

初始化和终止顺序

安全性

运行时链接编程接口

装入其他目标文件

重定位处理

符号查找

获取新符号

测试功能

使用插入

调试帮助

调试功能

调试器模块

4.  共享目标文件

第 2 部分快速参考

5.  链接编辑器快速参考

第 3 部分高级主题

6.  直接绑定

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

8.  Mapfile

9.  接口和版本控制

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

11.  可扩展性机制

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

12.  目标文件格式

13.  程序装入和动态链接

14.  线程局部存储

第 5 部分附录

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

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

索引

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

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

装入其他目标文件

运行时链接程序允许您使用环境变量 LD_PRELOAD 在进程初始化期间引入新目标文件,从而提供其他级别的灵活性。此环境变量可初始化为共享目标文件或可重定位目标文件名,也可初始化为用空格分隔的文件名字符串。这些目标文件将在装入动态可执行文件之后以及装入任何依赖项之前装入。这些目标文件都被指定了 world 搜索作用域和 global 符号可见性。

在以下示例中,首先装入动态可执行文件 prog,然后装入共享目标文件 newstuff.so.1。接下来装入在 prog 中定义的依赖项。

$ LD_PRELOAD=./newstuff.so.1 prog

可以使用 ldd(1) 显示这些目标文件的处理顺序。

$ ldd -e LD_PRELOAD=./newstuff.so.1 prog
        ./newstuff.so.1 => ./newstuff.so
        libc.so.1 =>     /lib/libc.so.1

在以下示例中,预装入比较复杂且耗时。

$ LD_PRELOAD="./foo.o ./bar.o" prog

运行时链接程序首先会对可重定位目标文件 foo.obar.o 进行链接编辑,以生成在内存中保存的共享目标文件。然后,会按照前面示例中预装入共享目标文件 newstuff.so.1 的方式,在动态可执行文件及其依赖项之间插入此内存映像。同样,可以使用 ldd(1) 显示这些目标文件的处理顺序。

$ ldd -e LD_PRELOAD="./foo.o ./bar.o" ldd prog
        ./foo.o =>       ./foo.o
        ./bar.o =>       ./bar.o
        libc.so.1 =>     /lib/libc.so.1

在动态可执行文件后插入目标文件的这些机制将插入概念引入到另一个层次。您可以使用这些机制来试验驻留在标准共享目标文件中的函数的新实现。如果预装入包含此函数的目标文件,则该目标文件将插入到原始功能中。因此,原始功能会完全隐藏在新的预装入版本之后。

预装入的另一个用途是扩充驻留在标准共享目标文件中的函数。通过在原始符号中插入新符号,新函数可以执行其他处理。新函数还可调用原始函数。此机制通常会将 dlsym(3C) 与特殊句柄 RTLD_NEXT 配合使用,以获取原始符号的地址。