为什么在使用GOT引用的共享对象中定义了非静态全局变量?

时间:2011-02-01 11:44:20

标签: linux global-variables elf dynamic-linking shared-objects

我指的是模块中定义的非静态全局变量,而不是外部变量。

为什么必须通过GOT引用?为什么不使用相对地址?(因为.data部分中的全局变量与.text部分中的引用之间的距离是常量,它也与位置无关)

2 个答案:

答案 0 :(得分:1)

由于你的变量不是static,所以在ELF上它可以被插入(想想LD_PRELOAD)。

答案 1 :(得分:0)

我也有同样的困惑。 如果在两个DSO中都定义了一个具有相同名称的全局变量,并且它们动态链接到一个可执行文件中,那么两个库是否都会访问该变量的同一副本? 变量所在的库(库的数据部分)取决于库加载的顺序?