博文建议有安卓开发基础的同学阅读。
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