JAVA和Smali数据类型对比
smali | java |
---|---|
V | void |
Z | boolean |
B | byte |
S | short |
C | char |
I | int |
J | long |
F | float |
D | double |
L | 对象 |
[ | 数组 |
语法
smali | meaning |
---|---|
.field | 定义变量 |
.method | 方法 |
.parameter | 方法参数 |
.prologue | 方法开始 |
.line 12 | 此方法位于第12行 |
const | 表示该变量为 32 位 |
const-wide | 该变量为 64 位 |
const/high16 v0, 0x7fo3 | 把0x7fo3赋值给v0 |
return-void | 函数返回void |
.end method | 函数结束 |
new-instance | 创建实例 |
iput-object | 对象赋值 |
iget-object | 调用对象 |
invoke-static | 调用静态函数 |
invoke-super | 调用父函数 |
invoke-direct | 调用private函数 |
invoke-virtual | 调用protected或public函数 |
throw vAA | 抛出vAA寄存器中指定类型的异常 |
array-length v1,v0 | 获取v0数组的长度且将值赋给v1 |
new-array v0,v0,[I | 构造Int类型,大小是v0的数组,并将值赋给v0寄存器 |
move-result vx | 将上一个方法的结果赋值给vx【基本数据类型】 |
move-result-wide vx | 将上一个方法调用的 long/double 结果值移动到vx,vx + 1中 |
move vx,vy | 将vy的内容移动到vx。两个寄存器必须位于第一个256寄存器范围内 |
cmpl-double vx,vy,vz | 比较两个双精度浮点数。如果vy小于vz,则vx结果为1,相等则结果为0,大于的话结果为-1 |
cmpg-double vx, vy, vz | 比较两个双精度浮点数。如果vy大于vz,则vx结果为1,相等则结果为0,小于的话结果为-1 |
cmp-long v0,v2,v3 | 比较v2和v3,如果v2>v3,v0=1;反之,v0=-1;相等,v0=0 |
smali跳转语句
“if-eq vA, vB, :cond_**” 如果vA等于vB则跳转到:cond_**
“if-ne vA, vB, :cond_**” 如果vA不等于vB则跳转到:cond_**
“if-lt vA, vB, :cond_**” 如果vA小于vB则跳转到:cond_**
“if-ge vA, vB, :cond_**” 如果vA大于等于vB则跳转到:cond_**
“if-gt vA, vB, :cond_**” 如果vA大于vB则跳转到:cond_**
“if-le vA, vB, :cond_**” 如果vA小于等于vB则跳转到:cond_**
“if-eqz vA, :cond_**” 如果vA等于0则跳转到:cond_**
“if-nez vA, :cond_**” 如果vA不等于0则跳转到:cond_**
“if-ltz vA, :cond_**” 如果vA小于0则跳转到:cond_**
“if-gez vA, :cond_**” 如果vA大于等于0则跳转到:cond_**
“if-gtz vA, :cond_**” 如果vA大于0则跳转到:cond_**
“if-lez vA, :cond_**” 如果vA小于等于0则跳转到:cond_**
更多资料
https://github.com/jsonhui/fl-android-re-tut/blob/master/1.md
http://blog.csdn.net/lostinai/article/details/48975661