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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容