Topwo博客
首页
博客
项目
您现在的位置是:
Topwo博客
>>
Android
文章
smali函数分析
发布时间:2022-09-02
作者:Topwo
来源:原创
点击:249
## 一.函数调用 smali中的函数和成员变量也分为两种,分别为 direct 和 virtual 两者的区别 1.direct method 是指private函数 2.virtual method 是指 protected和 public 函数 3.所以在调用函数时,有invoke-direct,invoke-virtual,另外还有invoke-static、invoke-super以及invoke-interface等几种不同的指令。 4.当然其实还有invoke-XXX/range 指令的,这是参数多于4个的时候调用的指令,比较少见 ### 1.invoke-static 用于调用static函数 例如: ``` invoke-static {}, Lcom/aaa;->CheckSignature()Z ``` 注意:invoke-static后面有一对大括号“{}”,其实是调用该方法的实例+参数列表,由于这个方法既不需参数也是static的,所以{}内为空 例如: ``` const-string v0, "NDKLIB" invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V ``` 这个是调用static void System.loadLibrary(String)来加载NDK编译的so库用的方法 ### 2.invoke-super 调用父类方法用的指令,一般用于调用onCreate、onDestroy等方法。 ### 3.invoke-direct 调用private函数: 例如: ``` invoke-direct {p0}, Landroid/app/TabActivity;-><init>()V ``` 这里init()就是定义在TabActivity中的一个private函数 ### 4.invoke-virtual 用于调用protected或public函数,同样注意修改smali时不要错用invoke-direct或invoke-static ### 5.invoke-xxxxx/range 当方法的参数多于5个时(含5个),不能直接使用以上的指令,而是在后面加上“/range”,range表示范围,使用方法也有所不同 ## 二.函数的返回结果 在Java代码中调用函数和返回函数结果可以用一条语句完成,而在Smali里则需要分开来完成,在使用上述指令后,如果调用的函数返回非void,那么还需要用到move-result(返回基本数据类型)和move-result-object(返回对象)指令: ``` const-string v0, "Eric" invoke-static {v0}, Lcmb/pbi;->t(Ljava/lang/String;)Ljava/lang/String; move-result-object v2 ``` v2保存的就是调用t方法返回的String字符串
上一篇:
billingclient:billing:2.0.3官方封装demo实例
下一篇:
手游敏感权限说明