安卓逆向学习篇之ARM汇编语言指令集介绍

本文介绍了ARM指令集的基本概念,包括跳转指令、比较指令、存储器与寄存器数据交互指令以及数据指令等内容。详细解释了B、BL、BX、BLX等跳转指令的功能,以及LDR、STR、LDM、STM等数据交互指令的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM指令集是指计算机ARM操作指令系统。在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向PC寄存器中写入目标地址值。ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类。

介绍几种常见的指令以及它们的作用。.

跳转指令

跳转指令有以下四种:

B:无条件跳转

例如: B 0x1234,跳转到绝对地址0x1234的位置执行相应代码。

BL:带链接的跳转指令

该指令将下一条指令的地址拷贝到R14寄存器也就是LR寄存器中 ,然后跳转到指定的地址。

例如:BL loc_234,跳转到目标loc_234地址去,这条指令一般用于子程序之间的调用。

BX:带状态切换的无条件跳转

BX 是用来切换处理器的状态。

例如:BX R0,跳转到R0寄存器指定的地址,并且根据R0最低位来切换处理器状态。

BLX:带链接和状态切换的无条件跳转。

比较指令

指令使用寄存器Rn的值减去operand2的值,根据操作的结果更新cpsr寄存器相关的条件标志位,方便后面的指令根据相应的条件来判断是否执行。

一般常用指令如下:

eq:相等/z=1

ne:不相等/标志z=0

hi:无符号数大于/c=1,z=0

cs/hs:无符号数大于或等于/c=1

cc/lo:无符号数小于/c=0

ls:无符号数小于或等于/c=0,z=1

gt:有符号数大于/z=0,n=v

ge:有符号数大于或等于/n=v

lt:有符号数小于/n!=v

le:有符号数小于或等于/z=1,n!=v

mi:负数/n=1

pl:整数或0/n=0

vs:溢出/v=1

vc:没有溢出

存储器与寄存器数据交互指令

数据交换指令是实现两个操作数据之间的位置互换的指令,这两个操作数可以是两个寄存器操作数,或一个寄存器操作数与一个存储器操作数,或两个存储器操作数,在多处理机中,也可以是一个寄存器操作数和一个共享存储器操作数。寄存器中存放的数据,可以是字符串,可以是数,也可以是一个地址,它可以存放各种类型的数据。

存储地址单元:地址(如0x00004000)与地址中存在的值。

LDR:从存储器中加载数据到寄存器 ← Load

LDR R8,[R9,#4] R8为待加载数据的寄存器,加载值为R9+0x4所指向的存储单元。

STR:将寄存器的数据存储到存储器 → Store

STR R8,[R9,#4] 将R8寄存器的数据存储到R9+0x4指向的存储单元。

LDM:将存储器的数据加载到一个寄存器列表 →

LDM R0,{R1-R3}将R0指向的存储单元的数据依次加载到R1,R2,R3寄存器。

STM:将一个寄存器列表的数据存储到指定的存储器 ←

PUSH:将寄存器值推入堆栈。

POP:将堆栈值推出到寄存器。

SWP:将寄存器与存储器之间的数据进行交换。

SWP R1, R1 [R0] 将R1寄存器与R0指向的存储单元的内容进行交换。

堆,队列,数据结构。栈是竖的,后进先出,且只能从栈顶依次填入数据。

数据指令

数据的三种指令分别为传送指令,数据算数运算指令以及数据逻辑运算指令。

传送指令

MOV:将立即数或寄存器的数据传送到目标寄存器 ←

MOV R0, #8 R0=8

数据算术运算指令

ADD,SUB,MUL,DIV ←

有符号、无符号运算,带进位运算。

数据逻辑运算指令

与:AND

或:ORR

异或:EOR

移位:实质是乘、除,类似于小数点移位,但相反,小数点左移,数变小,右移变大。但逻辑移位,左移变大,右移变小,且按2的倍数进行,因为是2进制。LSL:逻辑左移←

LSR:逻辑右移←

LSL R0,R1,#2 R0=R1*4

其他指令

协处理器指令:SWT(切换用户模式)

伪指令:DCB

小结

通过本次的分享,知道了ARM的优点为,执行快,可嵌入式开发,数据的三种指令有:传送指令,数据逻辑运算指令和数据算术运算指令,最后还了解了Android是基于Linux内核驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值