1625-5 王子昂 总结《2017年7月17日》 【连续第288天总结】
A. Smali函数分析
B.
Smali中函数的调用:
函数和成员变量一样也分为两种类型,分别为direct和virtual之分
简单来说,direct method就是private函数,其余的public和protect函数都属于virtual method
所以在调用函数时,有invoke-direct,invoke-virtual,另外还有invoke-static,invoke-super和invoke-interface等不同的指令
当参数多于4个时,需要使用invoke-xxx/range,比较少见
invoke-static:
调用static函数
invoke-static {},Lcom/aaa;->CheckSignature()Z
{}内其实是调用方法的实例+参数列表,由于这个方法既不需参数也是static的,所以{}内为空
const-string v0,"NDKLIB"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
这里调用static void System.loadLibrary(String)来加载NDK编译的so库用的方法,参数是v0即”NDKLIB”
invoke-super:
调用父类方法所使用的指令,一般用于调用onCreate,onDestroy等方法
invoke-direct:
调用private函数
invoke-direct{p0},Landroid/app/TabActivity;->< init>()V
这里< init>()就是定义在TabActivity中的一个private函数
invoke-virtual:
调用public和protect函数,同样注意修改smali时不要错用invoke-direct或invoke-static
sget-object v0,Lcom/dddd;