Android逆向基礎(chǔ)1(Smali語法入門)

簡單的說,Smali就是Dalvik VM內(nèi)部執(zhí)行的核心代碼。

1. Smali的基本類型

  • B---byte
  • C---char
  • D---double
  • F---float
  • I---int
  • J---long
  • S---short
  • V---void
  • Z---boolean
  • [XXX---array (數(shù)組)
  • Lxxx/yyy---object (對象)

2. 函數(shù)的定義

函數(shù)的定義一般為:
Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type
注意參數(shù)與參數(shù)之間沒有任何分隔符,同樣舉幾個例子就容易明白了:
(1) foo ()V
沒錯,這就是void foo()。
(2) foo (III)Z
這個則是boolean foo(int, int, int)。
(4) foo (Z[I[ILjava/lang/String;J)Ljava/lang/String;
看出來這是String foo (boolean, int[], int[], String, long) 了嗎?

3. Smali基本語法

  • .field private isFlag:z 定義變量
  • .method 方法
  • .parameter 方法參數(shù)
  • .prologue 方法開始
  • .line123 此方法開始于123行
  • invoke-super 調(diào)用父函數(shù)
  • const/high16 v0,0x7fox 把0x7fox的值賦值給v0
  • invoke-direct 調(diào)用函數(shù)
  • return-void 函數(shù)返回void
  • .end method 函數(shù)結(jié)束
  • new-instance 創(chuàng)建實例
  • iput-object 對象賦值
  • iget-object 調(diào)用對象
  • invoke-static 調(diào)用靜態(tài)函數(shù)
  • .class public Lcom/disney/WMW/WMWActivty; 類名
  • .super Lcom/XXX/XXX/XXX; 父類名
  • .source “XXX.java” 源文件名
  • .implements Lcom/XXX/XXX/XXX; 實現(xiàn)了接口
  • .annotation 內(nèi)部類
  1. Smali局部變量
    (1) 本地寄存器 (local register, 非參寄存器)
    常用v開頭數(shù)字結(jié)尾的符號表示 v0,v1,v2…
    (2) 參數(shù)寄存器 (parameter regisgter)
    常用p開頭數(shù)字結(jié)尾的符號來表示 p1,p2,p3…
    a .register 用來標明方法中寄存器的總數(shù),即參數(shù)寄存器和非參寄存器
    b .local 標明在這個函數(shù)中最少要用到本地寄存器的個數(shù),出現(xiàn)在方法第一行.

5.Smali條件語法

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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