位置有关码和位置无关码

什么是位置有关码和位置无关码

位置无关码:地址 = PC + 偏移量
位置有关码 :地址 = 链接地址(通过链接脚本指定)
学习代码重定位的时候涉及这两个概念,简单来说:代码运行的时候,是否和所处内存地址相关。“位置有关码”要求运行时代码必须在特定的地址;而“位置无关码”则没有要求,随便在哪个内存地址都可以运行。
补充:“位置有关码”和“位置无关码”有点类似于“相对路径”和“绝对路径”,这个不一定对,只是个人这么理解。“位置无关码”的地址是相对于当前PC值的偏移量,类似于“相对路径”,只要相对的偏移量是正确的,放在那里都可以;“位置有关码”的地址是指定的链接地址,类似于“绝对路径”,“绝对路径是唯一的”,所以必须把代码放在指定内存地址。至于为什么位置有关码必须在特定的地址,和链接脚本和硬件平台有关,这个比较底层了,我暂时不需要了解这么深入,以后用到再说吧。

怎么判断是位置有关码还是位置无关码

这里简单的总结一下:b、bl、adr、ldr指令是位置无关码,ldr伪指令去加载标号地址是位置有关码。分不清ldr指令和伪指令的可以看博客《LDR指令和LDR伪指令详解》。还想要更深入的了解位置有关码和位置无关码,建议用交叉编译工具链里的objdump工具,通过反汇编文件去查看位置有关码和位置无关码的差异。objdump工具的使用可以参考博客《反汇编工具objdump的使用以及反汇编文件的解读》

总结:

位置有关码和位置无关码是我在学习代码重定位的时候涉及到的概念,作用就是先运行一段位置无关码,将代码重定位到链接地址,接着执行后续的代码。在代码重定位完成之前,是不能运行位置有关码的,否则会出错。所以在写启动代码的时候,要了解这两个概念,用于重定位功能的代码必须都是位置无关码。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值