Smali基本语法

编程入门 行业动态 更新时间:2024-10-08 23:01:28

Smali基本<a href=https://www.elefans.com/category/jswz/34/1770552.html style=语法"/>

Smali基本语法

.field private isFlag:z  定义变量

.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  调用静态函数

条件跳转分支:

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

=============================================

if函数的java代码:

private boolean ifSense(){boolean tempFlag = ((3-2)==1)? true : false;if (tempFlag) {return true;}else{return false;}}

if函数分析:

.method private ifSense()Z.locals 2.prologue.line 22const/4 v0, 0x1     // v0赋值为1.line 24.local v0, tempFlag:Zif-eqz v0, :cond_0            // 判断v0是否等于0, 不符合条件向下走, 符合条件执行cond_0分支.line 25const/4 v1, 0x1            // 符合条件分支.line 27:goto_0return v1:cond_0const/4 v1, 0x0            // cond_0分支goto :goto_0
.end method###文字描述:如果符合if分支则程序往下走,最终return ; 而如果条件不符合则会走到 :cond_0分支 , 最终执行 goto :goto_0走回 :goto_0返回

======================================================

for函数java代码:

private void forSense(){listStr = new ArrayList<String>(COUNT);for (int i = 0; i < COUNT; i++) {listStr.add("现在轮到我上场乐");}
}

for函数分析:

.line 40const/4 v0, 0x0.local v0, i:I:goto_0if-lt v0, v3, :cond_0            //  if-lt判断数值v0小于v3 ,    如不符合往下走, 符合执行分支 :cond_0.line 43return-void.line 41:cond_0                // 标签iget-object v1, p0, Lcom/example/smalidemo/MainActivity;->listStr:Ljava/util/List;                // 引用对象const-string v2, "\u73b0\u5728\u8f6e\u5230\u6211\u4e0a\u573a\u4e50"invoke-interface {v1, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z        // List是接口, 所以执行接口方法add.line 40add-int/lit8 v0, v0, 0x1    // 将第二个v0寄存器中的值,加上0x1的值放入第一个寄存器中, 实现自增长goto :goto_0                // 回去:goto_0标签###文字描述:设定一个标签goto_0, 判断v0小于v3, 符合执行分支:cond_0 ,然后又跑回:goto_0做继续判断

 

 

.html

更多推荐

Smali基本语法

本文发布于:2024-02-28 05:13:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768441.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语法   Smali

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!