smali 基础
寄存器定义
.locals :定义寄存器数量。
函数定义
.method :函数开始。
.end :函数结束。
(move赋值,是右边给左边赋值)
move vA, vB :净vB寄存器的值赋予vA寄存器。
move/16 :vAA(8位),vBBB (16位) 定义数据宽度
move-object vA, vB :用于对象赋值。
move-object/16 vA, vB
返回
return vAA :返回值
return-object :返回一个对象
数据定义
const
const-string :定义为字符串
check-cast vAA,type@BBBB :将vAA寄存器的对象引用转换成指定类型。
instance-of vA,vB,type@CCCC :判断vB寄存器的对象引用是否可以转换成指定类型,如果是 vA =1 否 vA=0
new-instance vAA,type@AAAA :构造一个指定类型的新实例。
array-length vA,vB :获取vB寄存器中数组的长度,将结果赋值给vA寄存器。
new-array vA,vB,type@CCCC :vB构造指定类型和大小数组,将结果赋值给vA。
throw vAA :抛出vAA寄存器中指定类型的异常异常。
goto :无条件跳转。
packed-switch vAA,+BBBBBBBB :分支跳转指令,+BBBBBBBB 只想递增偏移表。
sparse-switch vAA,+BBBBBBBB :分支跳转,无规律。
if-test :if跳转指令
eq :等于
ne :不等于
lt :小于
ge :大于等于
gt :大于
nez :不等于0
eqz :等于
cmp-float :比较两个单精度浮点数。
cmp-double :比较两双精度浮点数。
cmp-long :比较两个长整型。
普通字段
iget :读操作
iput :写操作
静态字段
sget :读操作
sput :写操作
方法调用
invoke-virtual :调用实例虚方法。
invoke-super :调用实例的父类方法。
invoke-direct :调用实例的直接方法。
invoke-static :调用实例的静态方法。