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

2023-11-22

解析动态重定位时符号查找的搜索顺序是什么?

当解析共享库的符号时,加载程序首先在“主可执行文件”中搜索(以让主可执行文件覆盖定义...)还是什么?


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

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

乌尔里希·德雷珀的指南“如何编写共享库” 推荐阅读有关该主题的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ELF动态加载器符号查找排序 的相关文章

随机推荐

  • Objective C 中的模运算符

    来自 Objective C 编程 Kochan 程序5 8提示用户输入数字 然后显示数字 从该数字从最右边到最左边的数字 Program to reverse the digits of a number import
  • Java中如何快速判断一个方法是否被重写

    如果我可以确定同一类中的另一个方法没有被覆盖 那么我可以对我的其中一个方法应用可能的优化 这只是一个轻微的优化 所以反射是不可能的 我是否应该创建一个受保护的方法来返回该方法是否被重写 以便子类可以使其返回 true 我不会这样做 它违反了
  • 使用 monotonically_increasing_id() 将行号分配给 pyspark 数据帧

    我使用 monotonically increasing id 使用以下语法将行号分配给 pyspark 数据帧 df1 df1 withColumn idx monotonically increasing id 现在 df1 有 26
  • Twitter 搜索 (atom) API - 排除转发

    我正在使用 Twitter 的 Atom 搜索 API 现在我用某个词呈现所有 最新的 5 条 推文 但不幸的是 很多人转发了这篇帖子 而我同样的帖子被转发了 5 次 我可以排除转发吗 如果是这样 怎么办 我已经通过添加成功排除转发 排除
  • 如何检查输入文本字段是否仅包含空格?

    在 Javascript 中检查输入文本字段是否为空 不包含任何内容或仅包含空格 的最简单方法是什么 var str document getElementById myInput value if str match s nothing
  • 使用 websocket mod_proxy_wstunnel 进行反向代理

    我的 Web 套接字和反向代理 Apache 有问题 我已升级到最新版本 2 4 5 并加载了模块mod proxy wstunnel httpd conf
  • Rails 3.x 是否有调试工具栏

    I used 机架 错误一年多前 现在我想将它与新的 Rails 3 1 项目一起使用 我尝试安装 master 和 Rails3 分支 但没有成功 也尝试过一些 github 分支但他们也没有工作 有没有具有相同功能的替代方案 附 我已经
  • 使用 T-SQL,从字符串中返回第 n 个分隔元素

    我需要创建一个函数 它将返回分隔字符串的第 n 个元素 对于数据迁移项目 我使用 SQL 脚本将存储在 SQL Server 数据库中的 JSON 审核记录转换为结构化报告 目标是在没有任何代码的情况下交付一个 sql 脚本和该脚本使用的
  • Windows 内存文件系统

    我有一个命令行可执行文件 需要在 Windows XP 上从 Java 运行 它使用文件作为输入和输出 但我想避免文件IO的开销 所以我想到了内存RAM文件系统 NetBSD 有mount mfs 您能推荐最方便的方法吗 您还应该考虑您是否
  • 如何在 F# 中定义 printfn 等效项

    由于我使用 F 进行研究 特别是使用 F 交互式 因此我希望拥有可切换的 调试时打印 功能 I can do let dprintfn printfn F 交互式 说 val dprintfn Printf TextWriterFormat
  • 如何让 xdebug/step-debugging 与 ddev 一起使用?

    我一直在我的 Drupal 项目上使用 ddev 现在想使用 xdebug 这样我就可以使用 PhpStorm 进行逐步调试 或者实际上任何 IDE 都可以 但我似乎无法让它在断点处停止 我试图遵循ddev 文档中的说明但这并没有让我继续下
  • 在 Matlab 中生成包含给定集合中至少一个元素的所有组合

    I use combnk生成组合列表 如何生成始终包含特定值的组合子集 例如 对于combnk 1 10 2 我只需要包含 3 和 或 5 的组合 有没有快速的方法可以做到这一点 好吧 在您的具体示例中 从集合 1 10 中选择两个整数 其
  • 无法更改引导工具提示标题

    我已经浏览了有关堆栈溢出的几篇文章 询问了几乎完全相同的问题 但我在这些问题上发现的内容都没有帮助 我对 JQuery 和 Bootstrap 非常陌生 所以也许我只是错过了一些非常简单的东西 我希望能够在第一次初始化后更改不同元素上的工具
  • 如何将 boost 线程添加到向量中

    我有这样的错误 vector
  • Android ZipInputStream:只有 DEFLATED 条目可以有 EXT 描述符

    在我的 Android 设备上 我需要提取从内容 uri 获取的文件 一个 xapk 据我所知 这是一个普通的 zip 存档 我正在使用这行代码创建 ZipInputStream ZipInputStream zis new ZipInpu
  • *(a++) 给出错误,但 *(a+1) 没有给出错误?其中 a 是数组名称?

    在下面的代码中 void main char a 1 5 3 4 5 6 printf d n a line gives error wrong type argument to increment printf d n a 1 第 4 行
  • Javascript:非阻塞方式等待条件为真

    我有几个 ASP NET UpdatePanel 每个都有一个与同一按钮的服务器端单击事件绑定的 AsyncPostBackTrigger 由于一次只能有一个 UpdatePanel 执行其操作 因此我使用 get isInAsyncPos
  • 理解 std::forward

    为什么编译器无法推断出模板参数std forward I mean include
  • 如何获取 IQueryable.Count 的 ToTraceString

    I use ObjectQuery IQueryable ToTraceString 获取并调整将由 LINQ 执行的 SQL 代码 我的问题是 与大多数 IQueryable 方法不同 IQueryable Count 的定义如下 pub
  • ELF动态加载器符号查找排序

    解析动态重定位时符号查找的搜索顺序是什么 当解析共享库的符号时 加载程序首先在 主可执行文件 中搜索 以让主可执行文件覆盖定义 还是什么 根据我的理解 每个可执行对象都有自己的 查找范围 主可执行文件通常是 全局 查找范围中的第一个对象 这