在初始化和执行动态可执行文件的过程中,会调用一个解释程序将应用程序与其依赖项绑定。在 Oracle Solaris OS 中,此解释程序称为运行时链接程序。
在对动态可执行文件进行链接编辑过程中,将会创建一个特殊的 .interp 节以及关联的程序头。此节包含用于指定程序的解释程序的路径名。链接编辑器提供的缺省名称是运行时链接程序的名称:/usr/lib/ld.so.1(对于 32 位可执行文件)和 /usr/lib/64/ld.so.1(对于 64 位可执行文件)。
注 - ld.so.1 是共享目标文件的特例。此处使用的版本号为 1。但是,以后的 Oracle Solaris OS 发行版可能会提供更高的版本号。
在执行动态目标文件的过程中,内核将装入该文件并读取程序头信息。请参见程序头。内核可根据此信息查找所需解释程序的名称。内核会装入并将控制权转交给此解释程序,同时传递足够的信息以便解释程序继续执行应用程序。
除了初始化应用程序以外,运行时链接程序还会提供用来使应用程序扩展其地址空间的服务。此过程涉及装入其他目标文件以及绑定到这些目标文件提供的符号。
运行时链接程序执行以下操作:
查找并装入这些依赖项,分析其动态信息节以确定是否需要其他依赖项。
执行所有必需的重定位以绑定这些目标文件,为执行进程做好准备。
调用这些依赖项提供的所有初始化函数。
将控制权移交给应用程序。
可在应用程序执行时调用,以执行延迟函数绑定。
可由应用程序调用以使用 dlopen(3C) 获取其他目标文件,并使用 dlsym(3C) 绑定到这些目标文件中的符号。