原始类型
V void (只能用于返回值类型)
Z boolean
B byte
[B byte array
S short
C char
I int
J long
F float
D Double
寄存器与变量
java中变量都是存放在内存中的,android为了提高性能,变量都是存放在寄存器中的,寄存器为32位,可以支持任何类型,其中/Long和double是64位的,需要使用两个寄存器保存。
寄存器采用v和p来命名
v表示本地寄存器
p表示参数寄存器,关系如下
如果一个方法有两个本地变量,有三个参数
v0 第一个本地寄存器
v1 第二个本地寄存器
v2 p0 (this)
v3 p1 第一个参数
v4 p2 第二个参数
v5 p3 第三个参数
当然,如果是静态方法的话就只有5个寄存器了,不需要存this了。
.registers
指定方法中寄存器的总数
.locals
指定表明方法中不是参数寄存器的总数,放在方法的第一行。
名词解释
寄存器
. 点开头
.local
A
add-int/lit8
用法:
const/16 v30, 0x0
invoke-virtual/range {v17 .. v17}, Ljava/lang/StringBuffer;->length()I
move-result v31
add-int/lit8 v31, v31, -0x1
invoke-virtual/range {v29 .. v31}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v16
定义v31 = 0
v17是某个字符串变量的长度,最终赋给v31
v31将自身-1,再赋给v31,像v31 = v31 - 1 或 v31 = v31 --
v29是一个字符串
截取v29的字符串,最终赋给v16,像这样 v16 = v29.substring(0, v17字符串长度 -1)
aput-object
aput-object v4, v2, v3
将v4加入v2的数组中,索引是v3
S
sput-object
将一个对象引用值赋给一个变量</