非函数的全局符号条目如何在全局偏移 Table 中初始化?

How are the entries for Global Symbols that are not functions initialized in the Global Offset Table?

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

This will eventually pass control on to the dynamic linker that will load the library, update the GOT entry and jump to function

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

Now for other global symbols that are not functions (do not have PLT entries), how or when will they be initialized?

加载引用该符号的库(或可执行文件)时,加载程序会先解析其中的所有数据符号,然后再使其可用。

Can it be done lazily?

没有

另见