linux - 不是函数的全局符号的条目是如何在全局偏移表中初始化的?
问题描述
所以我正在尝试了解动态链接。在 amd64 上的 SysV ABI 上,可以通过过程链接表延迟加载来自其他共享库的函数,方法是初始化函数的 GOT 条目以指向其 plt 条目中的下一条指令。这最终会将控制权传递给将加载库、更新 GOT 条目并跳转到函数的动态链接器。现在对于其他不是函数的全局符号(没有 PLT 条目),它们将如何或何时初始化?可以偷懒吗?
解决方案
这最终会将控制权传递给将加载库、更新 GOT 条目并跳转到函数的动态链接器
这只是部分正确:库通常已经被加载,加载器只解析符号并更新GOT
条目以指向符号定义。
现在对于其他不是函数的全局符号(没有 PLT 条目),它们将如何或何时初始化?
当引用符号的库(或可执行文件)被加载时,加载器在使其可用之前解析其中的所有数据符号。
可以偷懒吗?
不。
另请参阅此答案。
推荐阅读
- php - 在同一个类文件中的钩子之间传递变量
- sql-server - 将 "a,b,c" 的 VARCHAR 转换为 "'a','b','c'"
- vba - 警告消息不适用于用户表单
- json - nlohmann json 版本 3.2.0,运行时错误
- c# - 列表到数据表的转换需要更多时间
- ios - NSLocalizedDescription=对象 StringOfNumbers/post1/StringOfNumbers.StringOfNumbers.jpg 不存在
- gradle - 检查后在 Gradle 插件中运行任务
- twitter - 如何创建显示在 Twitter 提要中的动态链接?
- c# - 带有 JSON 的自定义 404 页面,没有重定向
- reactjs - 如何在 cypress 测试中公开/访问像 Redux 这样的数据存储?