安卓逆向018之Arm汇编基础

Idea的位数的选择

	与电脑系统的位数没关系
	
	与反编译so文件的位数有关

学习技巧:

学习汇编与学习Linux系统指令一样,

不要直接找到arm所有指令然后背这是什么意思,


掌握了常见的指令,剩下的不常见的,

什么时候用到什么时候在去找手册,

1、跳转指令 B(全称:Branch分支的意思)

只要B开头,别管后边有没有别的东西跟着,统统先理解为跳转。

如图:

在这里插入图片描述

2、存储器、寄存器:存储数据的(小的数据:寄存器;大的数据:栈)


计算机中的内存,就是为数据服务的;



小的数据放寄存器内,但是寄存器能存的数据太少了,

故将大的东西存在栈内,

3、LDR、STR

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

~STR:将寄存器的数据存储到存储器

理解:就是一个赋值与取值的过程。



	举例子:
			
		   LDR R8,[R9,#4]	将R9+4地址里的值赋值给R8

		   LDR R1 = (xxxxx)	将数值xxxxx直接赋值给R1
		   

4、LDM、STM

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

	举例子:
		
		LDM R0,{
    
    R1-R3}	将R0指向存储单元的数据依次加载的R1、R2、R3寄存器

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

5、PUSH、POP

~PUSH:将寄存器值推入堆栈		压栈

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

6、MOV

~MOV:将立即数或寄存器的数据传送到目标寄存器
	
	举例子:
			
			MOV R0,#8	R0=8	将#8的值赋值给R0,
			
			MOV R0,R4			将R4的值赋值给R0
			

7、数据算数运算指令

ADD、SUB、MUL、DIV		即加减乘除

8、 数据逻辑运算指令


与:AND		全1出1

或:ORR		有1出1

异或:EOR	相同为0,不同为1

9、比较指令

~CMP:conpare(比较)
	
	举例子:
		
		 CMP R0 #0		R0寄存器中的值与0比较
		 

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/120276288