smial语句

原始类型

V                      void

Z                      boolean

B                      byte

S                      short

C                      char

I                      int

J                      long

F                      float

D                      double

引用类型

L                      对象

[                      数组

Android是基于寄存器存储的,一个寄存器占32位,java中long和double占8个字节,每一字节占8位,所以要用2个寄存器存储。

smali的语法

.field  定义变量

.method  方法

.parameter  方法参数

.prologue  方法开始

.line 12  此方法位于第12行

invoke-super  调用父函数

const/high16  v0, 0x7fo3  把0x7fo3赋值给v0

invoke-direct  调用函数

return-void  函数返回void

.end method  函数结束

new-instance  创建实例

iput-object  对象赋值

iget-object  调用对象

invoke-static  调用静态函数

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_**

下面看一个例子

java代码

privatebooleanshow(){booleantempFlag = ((3-2)==1)?true:false;if(tempFlag) {returntrue;                }else{returnfalse;                }            }


转换smali代码

.methodprivateshow()Z    .locals2.prologue//方法开始.line22const/4v0,0x1// v0赋值为1.line24.local v0, tempFlag:Zif-eqz v0, :cond_0// 判断v0是否等于0, 不符合条件向下走, 符合条件执行cond_0分支.line25const/4v1,0x1// 符合条件分支.line27:goto_0    return v1    :cond_0const/4v1,0x0// cond_0分支goto :goto_0.endmethod

你可能感兴趣的:(smial语句)