结合上一篇对smali语法的总结,对遇到的一些实例进行分析
.method constructor <init>(Lcom/android/netprovider/b/f;Ljava/util/ArrayList;)V
.locals 0
iput-object p1, p0, Lcom/android/netprovider/b/g;->b:Lcom/android/netprovider/b/f;
iput-object p2, p0, Lcom/android/netprovider/b/g;->a:Ljava/util/ArrayList;
invoke-direct {p0}, Ljava/lang/Thread;-><init>()V
return-void
.end method
这是一个构造函数,包含三个参数
- 类本身的this指针
- Lcom/android/netprovider/b/f类型的对象
- Ljava/util/ArrayList类型的对象
.locals 0指明本有本地变量。于是以上三个形参分别对应的寄存器代号为p0,p1,p2
iput-object p1, p0, Lcom/android/netprovider/b/g;->b:Lcom/android/netprovider/b/f;
iput-object p2, p0, Lcom/android/netprovider/b/g;->a:Ljava/util/ArrayList;
//分别用传递过来的两个参数,初始化给类的两个成员变量b和a。
invoke-direct {p0}, Ljava/lang/Thread;-><init>()V
//本类继承自Thread 这里显示的调用基类的构造函数
综上,将如上代码,转换为java代码为:
//被混淆过了,看起来好丑
g(f b,ArrayList a){
ma = a;
mb = b;
}
未完持续。。。