linux函数与数据访问

1.模块内部调用或跳转

对于现代的系统来讲,模块内部的跳转、函数调用都可以是相对地址调用,或者是基于寄存器的相对调用,所以对于这种指令是不需要重定位的。
即无论模块被装载到哪个位置,指令都有效。

2.模块内部数据访问

任何一条指令与它需要访问的模块内部数据之间的相对位置是固定的,那么只需要相对于当前指令加上固定的偏移量就可以访问模块内部数据了。
数据的相对寻址往往没有相对于当前指令地址(PC)的寻址方式,ELF采用了一个很巧妙的办法来得到当前的PC值,然后再加上一个偏移量就可以达到
访问相应变量的目的了。

3.模块间数据访问

在数据段里面建立一个指向这些变量的指针数组,被称为全局偏移表(GOT)

4.模块间调用、跳转

间接跳转和调用(GOT)

原文地址:https://www.cnblogs.com/moonflow/p/2614383.html