gpt4 book ai didi

linux - ELF 动态加载程序符号查找顺序

转载 作者:IT王子 更新时间:2023-10-29 00:18:13 29 4
gpt4 key购买 nike

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

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

最佳答案

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

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

建议阅读 Ulrich Drepper 的指南“How to Write Shared Libraries”。

关于linux - ELF 动态加载程序符号查找顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666248/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com