首页 > 解决方案 > 不是函数的全局符号的条目是如何在全局偏移表中初始化的?

问题描述

所以我正在尝试了解动态链接。在 amd64 上的 SysV ABI 上,可以通过过程链接表延迟加载来自其他共享库的函数,方法是初始化函数的 GOT 条目以指向其 plt 条目中的下一条指令。这最终会将控制权传递给将加载库、更新 GOT 条目并跳转到函数的动态链接器。现在对于其他不是函数的全局符号(没有 PLT 条目),它们将如何或何时初始化?可以偷懒吗?

标签: linuxdynamic-linkingabigot

解决方案


这最终会将控制权传递给将加载库、更新 GOT 条目并跳转到函数的动态链接器

这只是部分正确:库通常已经被加载,加载器只解析符号并更新GOT条目以指向符号定义。

现在对于其他不是函数的全局符号(没有 PLT 条目),它们将如何或何时初始化?

当引用符号的库(或可执行文件)被加载时,加载器在使其可用之前解析其中的所有数据符号。

可以偷懒吗?

不。

另请参阅此答案


推荐阅读