Smali基本語法

.field private isFlag:z  定義變量

.method  方法

.parameter  方法參數(shù)

.prologue  方法開始

.line 12  此方法位于第12行

invoke-super  調(diào)用父函數(shù)

const/high16 v0, 0x7fo3  把0x7fo3賦值給v0

invoke-direct  調(diào)用函數(shù)

return-void  函數(shù)返回void

.end method  函數(shù)結(jié)束

new-instance  創(chuàng)建實(shí)例

iput-object  對(duì)象賦值

iget-object  調(diào)用對(duì)象

invoke-static  調(diào)用靜態(tài)函數(shù)

條件跳轉(zhuǎn)分支:

"if-eq vA, vB, :cond_" 如果vA等于vB則跳轉(zhuǎn)到:cond_
"if-ne vA, vB, :cond_" 如果vA不等于vB則跳轉(zhuǎn)到:cond_
"if-lt vA, vB, :cond_" 如果vA小于vB則跳轉(zhuǎn)到:cond_
"if-ge vA, vB, :cond_" 如果vA大于等于vB則跳轉(zhuǎn)到:cond_
"if-gt vA, vB, :cond_" 如果vA大于vB則跳轉(zhuǎn)到:cond_
"if-le vA, vB, :cond_" 如果vA小于等于vB則跳轉(zhuǎn)到:cond_
"if-eqz vA, :cond_" 如果vA等于0則跳轉(zhuǎn)到:cond_
"if-nez vA, :cond_" 如果vA不等于0則跳轉(zhuǎn)到:cond_
"if-ltz vA, :cond_" 如果vA小于0則跳轉(zhuǎn)到:cond_
"if-gez vA, :cond_" 如果vA大于等于0則跳轉(zhuǎn)到:cond_
"if-gtz vA, :cond_" 如果vA大于0則跳轉(zhuǎn)到:cond_
"if-lez vA, :cond_" 如果vA小于等于0則跳轉(zhuǎn)到:cond_

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

if函數(shù)的java代碼:

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

if函數(shù)分析:

.method private ifSense()Z
    .locals 2

    .prologue
    .line 22
    const/4 v0, 0x1     // v0賦值為1

    .line 24
    .local v0, tempFlag:Z
    if-eqz v0, :cond_0            // 判斷v0是否等于0, 不符合條件向下走, 符合條件執(zhí)行cond_0分支

    .line 25
    const/4 v1, 0x1            // 符合條件分支

    .line 27
    :goto_0
    return v1

    :cond_0
    const/4 v1, 0x0            // cond_0分支

    goto :goto_0
.end method

###文字描述:如果符合if分支則程序往下走,最終return ; 而如果條件不符合則會(huì)走到 :cond_0分支 , 最終執(zhí)行 goto :goto_0走回 :goto_0返回

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

for函數(shù)java代碼:

private void forSense(){
    listStr = new ArrayList<String>(COUNT);
    for (int i = 0; i < COUNT; i++) {
        listStr.add("現(xiàn)在輪到我上場樂");
    }
}

for函數(shù)分析:

.line 40
    const/4 v0, 0x0

    .local v0, i:I
    :goto_0
    if-lt v0, v3, :cond_0            //  if-lt判斷數(shù)值v0小于v3 ,    如不符合往下走, 符合執(zhí)行分支 :cond_0

    .line 43
    return-void

    .line 41
    :cond_0                // 標(biāo)簽
    iget-object v1, p0, Lcom/example/smalidemo/MainActivity;->listStr:Ljava/util/List;                // 引用對(duì)象

    const-string v2, "\u73b0\u5728\u8f6e\u5230\u6211\u4e0a\u573a\u4e50"

    invoke-interface {v1, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z        // List是接口, 所以執(zhí)行接口方法add

    .line 40
    add-int/lit8 v0, v0, 0x1    // 將第二個(gè)v0寄存器中的值,加上0x1的值放入第一個(gè)寄存器中, 實(shí)現(xiàn)自增長

    goto :goto_0                // 回去:goto_0標(biāo)簽

###文字描述:設(shè)定一個(gè)標(biāo)簽goto_0, 判斷v0小于v3, 符合執(zhí)行分支:cond_0 ,然后又跑回:goto_0做繼續(xù)判斷
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 Android采用的是java語言進(jìn)行開發(fā),但是Android系統(tǒng)有自己的虛擬機(jī)Dalvik和ART,代碼編...
    風(fēng)澈vio閱讀 12,697評(píng)論 5 114
  • <div align =center>Android逆向工程 初篇</div> 本篇文章建立于有開發(fā)環(huán)境(jdk...
    Ojie閱讀 4,471評(píng)論 1 11
  • 想了解一下apk的破解,先了解一下dalvik的語法,這里摘借一下網(wǎng)友們的筆記,畢竟復(fù)制粘貼才是最快的。。。。。。...
    Sund4y閱讀 992評(píng)論 0 1
  • 回來,或永遠(yuǎn)走開 別這樣站在門口 如同一尊石像 用并不期待回答的目光 談?wù)撐覀冎g的一切 ——北島《彗星》 在今天...
    牧雲(yún)閱讀 871評(píng)論 0 0
  • 陳冠林,男,北京中關(guān)村一小三年級(jí)。 我愛火紅的顏色, 因?yàn)椤?初升的朝陽是火紅的, 我們的紅領(lǐng)巾是火紅的, 我們...
    栗霞閱讀 675評(píng)論 0 0

友情鏈接更多精彩內(nèi)容