数据类型:基类和引用类型,引用类型是对象和数组,其他都是基类。
在dalvik字节码中,寄存器总是32位可以存放任何类型的值,2个寄存器可以用来存放64位类型(长整形和双精度型)
#
表示注释
基类
字符 | 表示含义 |
---|---|
V | 空类型—仅仅可以用来作为返回类型 |
Z | Boolean, 布尔型 |
C | Char字符型 |
B | Byte, 字节型 |
I | Int整型 |
S | Short短整型,16位 |
J | Long长整型,64位 |
F | Float浮点型 |
D | Double,双精度浮点型, 64位 |
引用类型
对象:Lpackage/name/ObjectName; L表明一个对象类型,分号表明对象名的结束,等同于java语言中的package.name.ObjectName结构。 例如:”Ljava/lang/String;” => “java.lang.String”
数组:以”[“开始,”[I”表示一维整形数组,等同于Java中”int[]”,”[Ljava/lang/String”等同于Java中”String[]”
方法
Lpackage/name/ObjectName;->MethodName(III)Z: Lpackage/name/ObjectName; 是一个类, MethodName明显是一个方法名,(III)Z是方法的签名,‘III’在这个例子中是三个整形参数,Z是表示返回一个布尔类型的返回值
方法的参数一个接一个的列举在右边,中间没有分号
method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; 等同于Java中: String method(int, int[][], int, String, Object[])
Smali文件解读
1 | .class public Lcom/netease/ntunisdk/SdkNetease; // 类名(SdkNetease),包名(com.netease.ntunisdk)和访问属性(public) |
- .method 方法
- .prologue 方法开始
- .line 12 此方法位于第12行
- .end method 函数结束