模块内部的引用和模块外的引用,指令引用和数据引用组合一共四种情况
- 模块内部的函数调用和跳转
- 模块内部的跳转和函数调用都可以是相对地址调用,或者是基于寄存器的相对调用,不需要重定位(要加上
static
)
- 模块内部的跳转和函数调用都可以是相对地址调用,或者是基于寄存器的相对调用,不需要重定位(要加上
- 模块内部的数据访问
- 数据没有相对位置调用,但是可以通过获取 PC 值曲线求国,一种常见的方式是利用 call 压栈返回地址来实现得到当前 PC,通过计算偏移量达到相对地址调用数据的效果
- 模块外部的函数调用和跳转
- 在数据段中建立一个指向这些变量的指针数组,也被称为 全局偏移表 (GOT)
- 模块外部的数据访问
- 先获取当前 PC,再通过访问 GOT 表得到