0

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

4

1 回答 1

0

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

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

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

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

可以偷懒吗?

不。

另请参阅此答案

于 2021-11-11T04:37:38.590 回答