【安卓逆向】smali基础(一)
编程语言
2023-05-05 13:49:14
阅读次数: 0
Dalvik指令集
- 寄存器的定义
- 函数的定义
- 数据操作指令
move vA,vB
将vB寄存器的值赋予vA寄存器
move/16 vAA,vBB
定义了数据宽度为16位
move-object vA,vB
用于对象赋值
move-object/16 vAA,vBB
定义数据宽度
- 返回指令
return vAA
返回vAA寄存器的值
return-object
返回对象
- 数据的定义指令
const
数据定义
const-string
定义一个字符串
- 实例操作指令
check-cast vAA,type@BB
将vAA寄存器的对象引用转换成指定类型
instance-of vA,vB,type@CC
将判断vB寄存器的对象引用是否可以转换为指定类型,是vA=1,反正vA=0
new-instance vAA,type@AAA
构造一个指定类型的新实例
- 数组操作指令
array-length vA,vB
获取vB寄存器中的数组长度,结果赋予vA寄存器
new-array vA,vB,type@CC
构造指定类型和大小(vB)的数组,结果赋予vA
- 异常
throw vAA
抛出vAA寄存器中指定类型的异常
- 指令跳转
goto
无条件跳转
packed-switch vAA,+BB
分支跳转指令,+BB只想递增偏移表
sparse-switch vAA,+BB
分支跳转,无规律
- if跳转指令
if-test
eq
等于
ne
不等于
lt
小于
le
小于等于
ge
大于大于
gt
大于
nez
不等于0
nqz
等于0
- 比较指令
cmp-float
比较两个单精度浮点数
cmp-double
比较双精度浮点数
cmp-long
比较两个长整型
- 字段操作
- 方法调用
invoke-virtual
调用实例虚方法
invoke-super
调用实例的父类方法
invoke-direct
调用实例的直接方法
invoke-static
调用实例的静态方法
转载自blog.csdn.net/qq_49619863/article/details/129895987