所以我正在尝试了解动态链接。在 amd64 上的 SysV ABI 上,可以通过过程链接表延迟加载来自其他共享库的函数,方法是初始化函数的 GOT 条目以指向其 plt 条目中的下一条指令。这最终会将控制权传递给将加载库、更新 GOT 条目并跳转到函数的动态链接器。现在对于其他不是函数的全局符号(没有 PLT 条目),它们将如何或何时初始化?可以偷懒吗?
问问题
34 次
1 回答
0
这最终会将控制权传递给将加载库、更新 GOT 条目并跳转到函数的动态链接器
这只是部分正确:库通常已经被加载,加载器只解析符号并更新GOT
条目以指向符号定义。
现在对于其他不是函数的全局符号(没有 PLT 条目),它们将如何或何时初始化?
当引用符号的库(或可执行文件)被加载时,加载器在使其可用之前解析其中的所有数据符号。
可以偷懒吗?
不。
另请参阅此答案。
于 2021-11-11T04:37:38.590 回答