四.重定位引入和链接脚本
在了解重定位之前,必须先区分开链接地址和运行地址,位置有关代码和位置无关代码
===============================================
链接地址和运行地址:
链接地址:指在链接时指定的地址,是我们设想的将来程序要运行的地址。程序中所有标号的地址在链接后便确定了,不管程序在哪运行,都不会改变。
使用arm-linux-objdump反汇编查看的就是链接地址
。
运行地址:指程序在板子中实际运行的地址
从上面的定义可以看出,链接地址和运行地址可以相同,也可以不同。
===============================================
位置有关代码和位置无关代码:
位置有关代码:从字面意思看就是该指令的执行是与内存地址有关的;
如果运行地址和链接地址不相等,那么执行到此种指令的时候将会出现程序跑飞的情况。
位置无关代码(PIC):从字面意思看就是该指令的执行是与内存地址无关的;
无论运行地址和链接地址相等或者不相等,此种指令都能正常运行
。