arm汇编指令与机器码对应分析
转载:https://www.cnblogs.com/51qianrushi/p/4614491.html
我们编写的汇编程序还是不够底层,CPU都是对机器码进行操作的,所以还需要用汇编器将汇编代码转换成机器码才能被CPU处理。下面举几个例子来说说分析ARM机器码的方法。
对编译连接之后得到的ELF进行反汇编:arm-linux-objdump
查看得到的反汇编代码。这里如果想同时看到汇编代码和机器码,在编译的时候需要加上-g调试选项。
1、mov r1,#0xff
1110 00 1 1101 0 0000 0001 000011111111
前者是汇编代码,后者是其对应的机器码。用第一个例子具体讲一下分析的方法。首先必须具备的一个手册就是ARM Architecture Reference Manual。这是学习ARM处理器绝对权威的一个参考资料。先看看每种ARM指令的一般格式
31--28是条件段,取值表如下所示
这里的例子中mov后面没有跟条件,所以是AL,Always (unconditional) ,对应的机器码为1110
27--26为保留位,恒为00
25位:Distinguishes between the immediate and register forms of <shifter_operand>.
标志shifter_operand段存放的是立即数还是寄存器。若为寄存器则置零,若为立即数则置一。
24--21为opcode,标明指令的类型,下面是opcode的取值表
这个例子中mov对应的为1101
20位:Signifies that the instruction updates the condition codes.
表明该指令是否会影响程序状态字寄存器。是则置一,否则置零
19--16位:Specifies the first source operand register.
标明第一个源操作数寄存器,见每个指令的格式,有的有Rd,有的没有。
由MOV指令的一般格式可以看出,他是没有使用Rd的,所以这几位填全0,其他使用到Rn的,这几位填通用寄存器标号的二进制值。如r2,则为0010
15--12位:Specifies the destination register.
标明目的寄存器,填充方法同Rn
11--0位:Specifies the second source operand.
标明第二个源操作数,若为立即数则填该立即数的二进制值,若为通用寄存器则填通用寄存器标号的二进制值。
第一条指令的机器码到这里就分析完了,下面具其他几个不同的情况来验证上面的说法,分析方法还是一样的,这里就不一一分析了。
2、 movne r2,r1
0001 00 0 1101 0 0000 0010 000000000001
3、 cmp r1,r2
1110 00 0 1010 1 0001 0000 000000000010
4、 add r0,r0,r1
1110 00 0 0100 0 0000 0000 000000000001
5、 bic r0,r1,#0b101
1110 00 1 1110 0 0001 0000 000000000101
如果有疑问或者错误,欢迎指出。转载请注明出处!
arm汇编指令与机器码对应分析相关推荐
- ida pro 反汇编 Android so 库后修改 arm 汇编指令的方法总结
1 前言 最近博主在学习Android逆向的时候,参照吾爱破解论坛的<教我兄弟学Android逆向系列课程>学习的时候,学到第8章<教我兄弟学Android逆向08 IDA爆破签名验 ...
- ARM 汇编指令对应的机器码和条件码
一.ARM 汇编指令对应的机器码 二.条件码
- ARM汇编指令学习---基于启动文件startup.S分析
本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...
- 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总
嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...
- ARM汇编指令调试方法
学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...
- arm汇编指令详细整理及实例详解
目录 一.简介 二.ARM 汇编指令说明 2.1 32位数据操作指令 2.2 32位存储器数据传送指令 2.3 32位转移指令 2.4 其它32位指令 三.实例讲解 3.1 MRS 3.2 MSR 3 ...
- 1.15.ARM汇编指令3之逻辑指令
ARM汇编指令之逻辑指令:and & orr & eor & bic * and 逻辑与操作指令,将operand2的值与寄存器Rn的值按位逻辑与操作,结果保存到Rd中. 指令 ...
- arm汇编指令——分析问题的利器
文章目录 arm汇编指令为什么重要 1. 主导问题 2. arm汇编指令分类介绍 通用寄存器 状态寄存器 数据转移指令 寻址格式 运算指令 比较指令 跳转指令 3. 反汇编接口 4. 反汇编分析举例 ...
- 汇编指令和机器码在线转换工具
汇编指令和机器码在线转换工具 https://armconverter.com/ https://shell-storm.org/online/Online-Assembler-and-Disasse ...
最新文章
- Jsp实现图书馆借阅管理系统
- Mysql找回管理员password
- 多线程小抄集(新编三)
- java创建单线程计时器_我们如何在Java中实现计时器线程?
- python3 try except or_Python基础10:try except异常处理详解
- php中while能break吗,php中break的作用
- 查找命令find和其他常用查找命令
- Bootstrap元素居中
- 【python】tkinter教程、35个tkinter示例代码和GUI图示
- 国内外著名PT网站大全
- 计算机怎么改鼠标标志,电脑鼠标指针怎么改 修改电脑鼠标指针方法【图文】...
- 70个城市房价上涨,令人忐忑
- Python编程:从入门到实践第二版答案(第七章)
- 关于监听Android的静音键以及音量按键
- HTML的标签与选择器
- 计算机毕业设计springboot+vue基本微信小程序的云宠物小程序-宠物领养
- 基层社会治理综合管理平台智慧街道Java商业源码
- java毕业设计宝马官网Mybatis+系统+数据库+调试部署
- 关于Direct3D11中字体的思考
- 浅析客户端渲染(CSR)与服务端渲染(SSR)