bl 和 ldr跳转程序的区别

首先说明

BL main 为相对跳转指令,与位置无关代码。

LDR PC,=main 为绝对跳转指令,与位置有关代码。

可能看到这的人都有疑问,如下图。链接地址为0x50000000。

两段代码main函数位置如下图:


左右图的第11行 左边是 bl main的反汇编为 “ bl 50000298 ”,右边是 ldr pc,=main的反汇编为 " ldr pc,[pc, #4] "

乍一看第一个 bl 50000298 不是直接跳转到 50000298么,那不就是绝对跳转? ,第二个使用 ldr pc,[pc, #4],使用的时pc偏移量不是相对跳转么?

那你就中记了。

arm-linux-objdump的反汇编太贴心了。

左边图:

              反汇编软件在反汇编的时候把你的bl mian这条语句中的main的地址帮你计算了出来。但是,,它并不是按照你的实际运行地址计算的而是按照你的链接地址来的,

所以就出现了bl 50000298;正如左边图示的main函数位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值