我正在读博客https://eli.thegreenplace.net/2011/11/11/position-independent-code-pic-in-shared-libraries-on-x64
在“带有数据引用的 x64 PIC - 示例”部分中,模块似乎告诉动态链接器将绝对地址填充到myglob
into .got
,然后代码获取该地址并从该地址读取数据。
但是为什么编译器必须这样做,它是一个来自自身的符号,为什么不能只使用RIP相对寻址来访问这个符号呢?是否因为有时.data
模块可能会加载到未知的偏移量.text
(而不是始终加载到 旁边.text
)?
我的意思是,如果address_of(myglob)-address_of(instruction_that_access_myglob)
是某个值,为什么我们甚至必须知道 的绝对地址myglob
?