ZHCADC4A September 2011 – March 2014
某些上下文(包括多个可执行文件之间的共享库)需要与位置无关的寻址。为避免将与位置相关的地址编码到代码区段中,特地将此类地址生成到称为全局偏移量表 (GOT) 的表中,该表是每个静态链接单元的数据区段的一部分。程序不直接访问对象,而是从 GOT 读取变量的地址并间接寻址该变量。GOT 是数据段的一部分,始终使用静态链接时固定的偏移量来进行 DP 相对寻址。它由链接器生成,以响应编译器发出的特殊 GOT 生成重定位。当地址已知时,GOT 中的地址会在动态链接时得到修补。
编译器使用特殊重定位条目来引用 GOT。静态链接器自身生成表,以便响应特殊重定位。表条目本身具有(动态)重定位,动态加载器使用这些重定位来修补引用对象的最终解析地址。节 6.6 中介绍了基于 GOT 的寻址。节 13.5.1 中介绍了应用于 GOT 条目的重定位。
使用裸机模型的可执行文件和库可能需要、也可能不需要基于 GOT 的寻址。