arm指令学习
@TOC
简介
上一周打hxp的时候,遇到了一个3dsx的题,题目本身是拿arm架构写的,当我想更改汇编代码从而破解游戏的时候,不得以对每一条想知道的汇编指令进行搜索,加上后面用angr爆破的想法也因为arm退却(这个寒假搞定他,我觉得这会是一个很有用的解题手段),所以化了几个小时简单过了一下指令,且边写边学。
arm简介
精简指令集(RISC)
对于大部分的32位嵌入式都用arm
arm还有很多很多型号
可以参考这个视频:
ARM那些你得知道的事儿
寄存器
参考
######################
共有37个32位的寄存器
31个通用寄存器
6个状态寄存器
这些不一定可以同时访问,但r0-r14(通用寄存器),pc/r15(程序计数器),一个状态寄存器可以同时被访问
######################
r0-r7未分组寄存器
r8-r14分组寄存器
r15/pc 程序寄存器
r13 常用作堆栈指针sp 类似于rsp
r14/lr 常用作存储返回地址 (link)
r15/pc 当前指令+8个字节 类似于eip+8
r16/cpsr 状态寄存器 类似于flag寄存器
常见指令
算术和逻辑指令
1 | add a,b,c a=b+c 加法 |
移位操作
#后面跟常数
1 | lsl 逻辑坐移 |
乘法
1 | mul a,b,c a=b*c 乘法 |
比较指令
1 | cmp 比较 |
装载存储指令
1 | ldr 将内存数据载入寄存器 |
跳转指令
BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器)。
由于BL指令保存了下条指令的地址,因此使用指令“MOV PC ,LR”即可实现子程序的返回。
1 | b 类似于jmp |
传参方式
r0,r1,r2,r3 四个寄存器 多余的用栈来传参
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 yaoxixixi's blog!