I am reading the blog https://eli.thegreenplace.net/2011/11/11/position-independent-code-pic-in-shared-libraries-on-x64
In the part "x64 PIC with data references - an example", it seems that the module is telling the dynamic linker to fill the absolute address of myglob
into .got
, then the code get that address and read data from that address.
But why does the compiler have to do this, it's a symbol come from itself, why can't just use RIP-relative addressing to access this symbol? Is it because sometimes .data
of the module might be load to a unknown offset to .text
(instead of always loaded next to .text
)?
I mean, if address_of(myglob)-address_of(instruction_that_access_myglob)
is a certain value, why do we even have to know the absolute address of myglob
?