为什么内部符号的地址需要记录在.got中?

为什么内部符号的地址需要记录在.got中?

我正在读博客https://eli.thegreenplace.net/2011/11/11/position-independent-code-pic-in-shared-libraries-on-x64

在“带有数据引用的 x64 PIC - 示例”部分中,模块似乎告诉动态链接器将绝对地址填充到myglobinto .got,然后代码获取该地址并从该地址读取数据。

但是为什么编译器必须这样做,它是一个来自自身的符号,为什么不能只使用RIP相对寻址来访问这个符号呢?是否因为有时.data模块可能会加载到未知的偏移量.text(而不是始终加载到 旁边.text)?

我的意思是,如果address_of(myglob)-address_of(instruction_that_access_myglob)是某个值,为什么我们甚至必须知道 的绝对地址myglob

相关内容