首先说明

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函数位置。

右边图:

ldr pc, =main这条指令为伪指令,编译的时候会将main的链接地址存入一个地址。再将 ldr pc, =main转化为 ldr pc, [ pc, offset ]这样一个指令。所以上面的反汇编出来的 ldr pc, =main 就变成了 ldr pc. [ pc, #4 ],这句代码相当于  pc = *(pc+4); 由于ARM使用了流水线的原因,所以在执行 ldr pc. [ pc, #4 ]的时候 pc 不在这句代码这里了,而是跑到了 pc+8的地方,而 pc = *(pc + 4) = 5000029c 注意!!!!!!!! 这里的   5000029c  是存在代码段中的一个常量,并不是计算出来的,不会随程序的位置而改变,所以无论代码和pc怎么变 *(pc+4) 的值时不会变的。

到这还是不明白为什么bl main是相对跳转 ,ldr pc, =main是绝对跳转,反而是两个指令都是绝对跳转了。

上面说了,反汇编软件在反汇编BL main时帮我们把main的地址算出来了,,那我们看看它时怎么算的,,,,,,费了好大力气终于找到了BL跳转指令的计算方法(大神见笑了),看图:(该图取至 《ARM体系结构与编程》--- 杜春雷 Page 59)

此时我们来模拟一下反汇编软件的计算过程:(为方便理解我们假设程序在 50000000处执行)

看一下左图 50000010 处的机器码为 eb0000a0 转化成二进制就是 1110 1011 0000 0000 0000 0000 1010 0000

最高4位时条件码 1110 就是无条件执行 (《ARM体系结构与编程》 Page 23)。

接着的4位 1011 是BL指令的指令码。

后面的24位0000 0000 0000 0000 1010 0000 即为地址码

按照其计算方式:

1、将指令中24位带符号的补码立即数扩展为32位(扩展其符号位)

原数变成  0000 0000 0000 0000 0000 0000 1010 0000

2、将此数左移两位

变成    0000 0000 0000 0000 0000 0010 1000 0000 =  0x280

3、将得到的值加到PC寄存器中得到目标地址

由于ARM流水线原因 此时的 pc = 0x50000010+8 = 0x50000018

pc = pc + 0x280 = 0x50000298与左边图中的mian的地址相等。程序就跳转到了mian

在算的过程中我们使用的始终是PC的值,假设程序在 0 地址处执行,那么计算方法一样,pc 的值变了计算出来的结果也随之改变。所以 BL 的跳转时与位置无关的

转载自https://blog.csdn.net/xshenpan/article/details/49337845

bl 和 ldr跳转程序的区别相关推荐

  1. 微信小程序和vue双向绑定哪里不一样_浅析Vue 和微信小程序的区别、比较

    写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别. 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. vue的钩子函数 ...

  2. 小米 红米 Redmi note11 4G 5G 手机解锁BL 秒BL解锁 教程 跳过168小时 selenes evergo线刷机包下载

    红米(Redmi)Note 11 5G 手机BL解锁 红米note11 4G/5G 秒解锁BL锁 方法 教程 跳过168小时 新版本 selenes evergo 红米Note11系列版本非常多,从4 ...

  3. web:H5和小程序的区别

    web:H5和小程序的区别 H5和小程序的区别 H5和小程序不具备可比性,只是很多移动端的场景下,两种选择都能实现产品的大部分功能.最近几年,小程序的兴起,让人们理解他等同于H5,其实不然. 关于小程 ...

  4. linux进程和程序的却别,操作系统:进程的概念和与程序的区别

    进程的概念和与程序的区别 1.进程的定义 进程是允许某个并发执行的程序在某个数据集合上的运行过程. 进程是由正文段.用户数据段及进程控制块共同组成的执行环境.正文段存放被执行的机器指令,用户数据段存放 ...

  5. 2.1 linux C 进程与多线程入门--(1)进程和程序的区别

    进程和程序的区别: j进程是活动的程序,而程序是一个代码的集合.进程是加载到内存中的程序,而程序没有加载到内存中,只是在磁盘上存储着. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  6. Vs中新建 网站 和Web应用程序的区别

    Vs中新建 网站 和Web应用程序的区别 网上找的看的太乱,整理了一下 1)Web应用程序是整站编译成一个dll,编译会稍慢.     网站每页单独编辑,App_Code中才编译成一个程序集,所以每次 ...

  7. 预处理,编译,汇编,链接程序的区别

    预处理,编译,汇编,链接程序的区别 @(OS) 一段高级语言代码经过四个阶段的处理形成可执行的目标二进制代码. 预处理器→编译器→汇编器→链接器 预处理器\rightarrow 编译器 \righta ...

  8. [zz]ASP.net中新建Web网站与新建Web应用程序的区别

    http://www.cnblogs.com/lengjunming/archive/2011/02/15/1955504.html http://book.51cto.com/art/201010/ ...

  9. 微信小程序个人和企业有什么不一样(个人和企业小程序的区别)

    很多朋友在注册微信小程序时不知道微信小程序个人和企业有什么不一样.本文就为大家介绍一下个人小程序和企业小程序的区别. 1.注册流程不一样.在微信公众平台注册的小程序因为个人,小程序注册主体是个人用户所 ...

最新文章

  1. MySQL测试环境遇到 mmap(xxx bytes) failed; errno 12解决方法
  2. HDOJ 1016 HDU 1016 Prime Ring Problem ACM 1016 IN HDU
  3. 77 行代码实现 ABAP ALV 中的双击事件处理
  4. HTML CSS样式表布局
  5. 【转载】要有梦想-创造卓越的职业生涯
  6. Maven学习(八)-----Maven依赖机制
  7. Hbase问题汇总与解答
  8. 更新MYSQL生成日历表,支持跨年份 存储过程
  9. 这样的快速分时界面怎么样?
  10. mysql 写出高性能sql 防止索引失效总结
  11. 草图大师SketchUp2018下载和安装教程
  12. SQL server 字符串 转 日期格式
  13. SQL server中函数依赖,完全与部分函数依赖,平凡和非平凡函数依赖
  14. c语言中next如何用,C++ STL prev()和next()函数用法详解
  15. 光量子计算机的信息载体,如何使“孤傲”的光子改变彼此的量子态?
  16. 惠普刀片服务器型号,HP ProLiant刀片服务器简介
  17. 罗技鼠标正在连接服务器失败,说好的真爱,怎么就翻车了!失败的罗技M720入手记...
  18. skynet 游戏服务器探索(1)--熟悉skynet(网络)
  19. SpringBoot四大核心
  20. hook系统调用(一):爬取MSDN官网上的API调用并改为自己的API(c++正则表达式的应用)

热门文章

  1. 开关电源异址替换实战割接
  2. 8分频verilog线_Verilog设计分频器(面试必看)
  3. DL之DNN优化技术:DNN中抑制过拟合/欠拟合、提高泛化能力技术的简介、使用方法、案例应用详细攻略
  4. Dataset之Boston:Boston波士顿房价数据集的简介、下载、使用方法之详细攻略
  5. Py之wxPython:wxPython的简介、安装、使用方法之详细攻略
  6. DL之DNN:基于神经网络(从1层~50层)DNN算法实现对非线性数据集点进行绘制决策边界
  7. CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介、安装、使用方法详细攻略
  8. Docker windows 安装MySql和Tomcat
  9. 在VMware运行Linux下,密码错误的原因
  10. 【转载】OI生涯结束……在逸夫楼那些的日子里