Smali基本语法 - lee0oo0 - 博客园
が分かりやすかったのでそのまま訳しただけ
.field private isFlag:z 変数定義
.method メソッド
.parameter メソッドパラメータ
.prologue メソッドの始まり
.line 12 ソースコードだと12行目
invoke-super 親クラスのメソッド呼び出し
const/high16 v0, 0x7fo3 v0に0x7fo3を割り当て
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_**に飛ぶ
========================================
javaでのif文:
private boolean ifSense(){
boolean tempFlag = ((3-2)==1)? true : false;
if (tempFlag) {
return true;
}else{
return false;
}
}
Smaliでのif文:
.method private ifSense()Z
.locals 2
.prologue
.line 22
const/4 v0, 0x1
.line 24
.local v0, tempFlag:Z
if-eqz v0, :cond_0
.line 25
const/4 v1, 0x1
.line 27
:goto_0
return v1
:cond_0
const/4 v1, 0x0
goto :goto_0
.end method
========================================
javaでのfor文:
private void forSense(){
listStr = new ArrayList<String>(COUNT);
for (int i = 0; i < COUNT; i++) {
listStr.add("现在轮到我上场乐");
}
}
Smaliでのfor文:
.line 40
const/4 v0, 0x0
.local v0, i:I
:goto_0
if-lt v0, v3, :cond_0
.line 43
return-void
.line 41
:cond_0
iget-object v1, p0, Lcom/example/smalidemo/MainActivity
const-string v2, "\u73b0\u5728\u8f6e\u5230\u6211\u4e0a\u573a\u4e50"
invoke-interface {v1, v2}, Ljava/util/List
.line 40
add-int/lit8 v0, v0, 0x1
goto :goto_0