linux – ELF动态加载器符号查找排序

前端之家收集整理的这篇文章主要介绍了linux – ELF动态加载器符号查找排序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
解析动态重定位时符号查找的搜索顺序是什么?

解析共享库的符号时,加载器首先搜索“主可执行文件”(让主可执行文件覆盖定义……)或者什么?

解决方法

根据我的理解,每个可执行对象都有自己的“查找范围”:

>主可执行文件通常是“全局”查找范围中的第一个对象.这意味着主可执行文件中定义的符号将覆盖依赖共享库中的符号.使用LD_PRELOAD工具添加的共享对象将添加到主可执行文件后面的全局查找范围中.
>但是,如果正在加载的共享对象使用DF_SYMBOLIC标志,则在该对象中生成的符号引用将在搜索全局查找范围之前查找对象内的定义.
>使用dlopen()打开的共享对象可能有自己的依赖项.如果在调用dlopen()期间未设置RTLD_GLOBAL标志,则会将这些依赖项添加到该对象的查找范围,但不会影响全局查找范围.如果将RTLD_GLOBAL标志传递给dlopen(),则共享对象(及其依赖项)将添加到“全局”查找范围,从而更改后续符号查找的行为.

Ulrich Drepper的指南“How to Write Shared Libraries”建议阅读此主题.

猜你在找的Linux相关文章