加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 02:22:41 所属栏目:Linux 来源:网络整理
导读:解析动态重定位时符号查找的搜索顺序是什么? 解析共享库的符号时,加载器首先搜索“主可执行文件”(让主可执行文件覆盖定义……)或者什么? 解决方法 根据我的理解,每个可执行对象都有自己的“查找范围”: 主可执行文件通常是“全局”查找范围中的第一个对
解析动态重定位时符号查找的搜索顺序是什么?

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读