地址无关
解决绝对地址的重定位问题
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解决模块外部函数引用问题
数据部分还存在绝对地址引用,比如指针变量。