PIC机制

PIC机制,主要是为了program可以在内存地址空间复用,从而节约内存。

PIC机制总是和GOT表在一起。GOT表每个进程一份,维护了到唯一一份SO的symbol跳转表。

如进程A需要调用func,首先经过GOT,找到func的重定位地址。

The rationale behind this indirect addressing is to generate code that can be independently accessed of the actual load address

即编译的时候,只知道B.SO的相对GOT ENTRY的地址,把它encode到执行文件A中。A在执行的时候,通过GOT表找就可以了。GOT ENTRY有一个专门的寄存器维护。

 

相关:.a连接到.so,需要把.a中的代码,也用-PIC编译,再archieve。

见:https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/ 

 

https://wiki.gentoo.org/wiki/Hardened/Introduction_to_Position_Independent_Code

https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/

 

posted @ 2022-12-01 11:43  xuyv  阅读(82)  评论(0编辑  收藏  举报