地址无关

解决绝对地址的重定位问题

separate code from data;

generate code that doesn’t depend on where it is loaded

代码部分

模块内引用函数

相对跳转

模块内引用数据

和函数跳转不同(函数跳转天然相对当前pc)

通过一个特殊的函数读取当前pc,加上偏移量来模仿相对寻址

call指令会将返回地址压到栈顶,esp指向栈顶,ecx是返回值

00000494 <__i686.get_pc_thunk.cx>:
 494: 8b 0c 24              mov    (%esp),%ecx
 497: c3                    ret

模块外部,查表,间接跳转

表的位置是固定的

lazybinding使用plt解决模块外部函数引用问题

数据部分还存在绝对地址引用,比如指针变量。