程序执行和变量访问的两种方式:
- pc指针+偏移地址
- 绝对地址
位置无关码
没有出现绝对地址访问的代码称为位置无关码
- 普通.text段指令
- 局部变量
位置无关码可以在任意合法内存运行
位置相关码
出现了绝对地址访问的代码称为位置相关码
-
访问.data段:初始值非零的全局变量、静态变量
-
访问.rodata段:字符串、具有初始值的数组
-
访问.bss段:初始值为0的全局变量、静态变量
-
特殊.text段指令
汇编: ldr pc,=100000
c语言:(*(void(*)(void))0x100000)();
位置相关码必须在指定运行地址运行
重定位
在执行位置相关码之前,可以通过位置无关代码把位置相关码加载到位置相关代码的指定位置,如重定位.data段