博文建議有安卓開發基礎的同學閱讀。
Smali是什么?
Smali是安卓系統里的Java虛擬機(Dalvik)所使用的一種.dex格式文件的匯編器,而Baksmali是反匯編器。其語法是一種寬松式的Jasmin/dedexer語法。
Smali語言其實就是一種面向Dalvik的匯編語言(匯編語言是一種用於電子計算機、微處理器、微控制器,或其他可編程器件的低級語言。在不同的設備中,匯編語言對應着不同的機器語言指令集。使用匯編語言編寫的源代碼,然后通過相應的匯編程序將它們轉換成可執行的機器代碼。這一過程被稱為匯編過程。),我們用smali語言寫的代碼通過匯編器就轉換成Dalvik可以執行的dex文件。
對應的有兩個工具,smali.jar將Smali文件轉換為dex文件,baksmali.jar則是將dex文件轉換為smali文件。apktool能反編譯出smali文件就是因為它里面用了baksmali工具。
Smali語法
簡寫 | 含義 |
---|---|
B | byte |
C | char |
D | double (64 bits) |
F | float |
I | int |
J | long (64 bits) |
S | short |
V | void 只能用於返回值類型 |
Z | boolean |
對象類型
表現形式:L對象所在包位置/對象名稱;
一般形式:Ljava/lang/String;
數組類型
表現形式:[數組內容
一般形式:[Ljava/lang/String
方法
表現形式:L表示對象;->i(L第一個參數;L第二個參數;)I
一般形式:Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
字段
表現形式:L對象類型;->字段名稱:L字段類型;
一般形式:ff = "aa"; 轉換后是 Lcom/example/reforceapk/MyLog;->ff:Ljava/lang/String