Smali語法解析

Smali語法解析

由於碼農對CSDN使用不熟悉,想要更好的閱覽效果請點擊http://wenku.baidu.com/view/ff08c43a69eae009581bec87.html 下載。

類型

最先來了解Dalvik字節碼只有兩種類型:基本類型和引用類型。除了對象和數組外,其他的Java類型都是基本類型。這個Smali類型是和Dalvik類型是保持一致的。

V void,只用於返回值類型
Z boolean
B byte
S short
C char
B byte
I int
J long ///長整型
F float
D double
[ 數組類型
L Java類類型

.class <訪問權限> [修飾關鍵字] <類名> //指定了當前類名
.super <父類名> //指定了當前類的父類
.soucre <源文件名> //指定了當前類的源文件名
例如:
打開某反編譯的smali文件:
這裏寫圖片描述
該源程序結構如圖所示:(包文件不考慮)
這裏寫圖片描述


接下介紹的是字段(fields):聲明字段使用“.field”指令
這裏寫圖片描述

static fields

.field <訪問權限> [修飾關鍵字] static 字段:字段類型

instance fields

.field <訪問權限> [修飾關鍵字] 字段:字段類型
兩者區別:後者少了static關鍵字。
比如以下的實例字段聲明:
.field private conn:Landroid/content/ServiceConnection;
表示聲明一個私有字段conn;它的類型是“android/content/ServiceConnection;”。(注意分號不能丟)


如果一個類中有方法,那麼必然有相關的發編譯代碼。方法的聲明使用“.method”指令,“.end method”表示方法結束。
這裏寫圖片描述

direct methods

.method <訪問權限> [修飾關鍵字] <方法原型>
<.locals> //聲明局部變量的個數
[.parameter] //聲明參數的個數
[.prologue] //指令的開始處
[.line] //指示在源代碼的行數
<代碼體>
.end method
虛方法和直接方法相同,只是註釋不同。
這裏寫圖片描述


如果一個類實現了接口,會使用”.implememts”指令。

interfaces

.implememts <接口名>
如果一個使用了註釋,會使用“.annotation”指令。
這裏寫圖片描述
MemberClasses 註解是編譯時自動加上的, MemberClasses 註解是一個“系統註解”,作用是爲父類提供一個MemberClasses列表。MemberClasses即子類成員集合,通俗的講就是一個內部類列表。
註釋的格式:

annotations

.annotation [註釋屬性] <註釋類名>
[註釋字段=值]
.end annotation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章