12345下一页
返回列表 发新帖

教你读懂Smali代码(四)

    [复制链接]

319

主题

4374

回帖

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
120398
好评
1132
信誉
201

MT论坛元老MT论坛优秀教师2018MT论坛优秀成员

QQ
发表于 2018-5-28 16:22:43 | 显示全部楼层 | 阅读模式  来自 江苏
教你读懂Smali代码(三)

调用方法

Smali语法中调用方法的指令一共有5条,分别是:

指令名称 含义
invoke-virtual 调用虚方法
invoke-direct 直接调用方法
invoke-static 调用静态方法
invoke-super 调用父类方法
invoke-interface 调用接口方法

使用语法是:invoke-xxxxxx {参数列表}, 类名->方法名(参数类型)返回类型

所以当你在Smali代码中看到invoke开头的指令,就可以直接确定这句代码用于调用某个方法,至于invoke-后面跟着的单词,取决于它要调用的方法的类型。

调用虚方法

虚方法其实是Java多态中的一个概念,大家应该知道Java中子类可以重写父类中可被继承的非final方法,调用这些方法时,都需要使用invoke-virtual指令,才能实现多态的特性,例如下面代码:
  1. Object obj = "123";
  2. obj.equals("456");
复制代码

这边调用equals方法的Smali代码是:
  1. invoke-virtual {v0, v1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
复制代码

表面上看是调用Object的equals方法,但是由于obj实际上是字符串“123”,而字符串类String中重写了equals方法,所以虚拟机最后调用的是String的equals方法。

直接调用方法

由于调用虚方法时,虚拟机需要先查找该方法是否被重写,而对于那些无法被重写的方法,查找显得是在浪费时间,所以使用invoke-direct指令来提高效率,其通常用于final方法、private方法、构造方法。

调用静态方法

这个没什么好说的,调用static方法时,就使用invoke-static

调用父类方法

在子类中,如果它已经重写了父类的XX方法,而又想调用父类的XX方法时,可通过super.XX()来调用,其对于的指令就是invoke-super

调用接口方法

这个很好理解,invoke-xxxxxx {参数列表}, 类名->方法名(参数类型)返回类型,如果类名对应的类是个接口,那么xxxxxx就得写interface

补充

上面的5条指令都有对应的range扩展指令,也就是:invoke-virtual/rangeinvoke-direct/range等。

使用语法是:invoke-xxxxxx/range {vN...vM}, 类名->方法名(参数类型)返回类型,其中N小于M。

其等价于:invoke-xxxxxx{vN, vN+1,vN+2, ..., vM-2, vM-1, vM}, 类名->方法名(参数类型)返回类型

一般只会对拥有很多个参数的方法使用range指令,来减少生成的代码体积以及提高运行效率。
已有15人评分好评 金币 理由
木偶人ra + 1
qq8438321 + 1
蓝柚 + 1
onefan + 1
bjxiaoyao + 1 + 1
seattle + 1 很给力!
小兴 + 1
lee2099 + 1
Xoxom + 1 + 1
ㅤㅤㅤㅤ51519 + 1
xiaoshizi + 1
反射大神 + 1
Gal-Val + 1 + 1 淡定
STarryNM + 1
五花肉 + 1

查看全部评分 总评分:好评 +12  金币 +6 

本帖被以下淘专辑推荐:

回复

使用道具 举报

69

主题

8760

回帖

3万

积分

版主

神秘人

Rank: 7Rank: 7Rank: 7

金币
14046
好评
277
信誉
121

MT论坛大神2018国庆快乐MT论坛元老MT论坛优秀版主MT论坛最佳新人2018国庆节MT论坛帅哥MT论坛活跃会员2019-5.1节快乐考神MT论坛侠客MT论坛新人

QQ
发表于 2018-5-28 16:54:18 来自手机  | 显示全部楼层  来自 福建
沙发
回复

使用道具 举报

68

主题

6378

回帖

1万

积分

博士生

MT元老管理

Rank: 7Rank: 7Rank: 7

金币
155
好评
48
信誉
100

MT论坛元老MT论坛荣誉管理MT论坛帅哥2018国庆节考神MT论坛活跃会员MT论坛最佳新人MT论坛新人

发表于 2018-5-28 17:02:51 来自手机  | 显示全部楼层  来自 广西
板凳           
回复

使用道具 举报

79

主题

527

回帖

2656

积分

大学生

TSYSDWQ

Rank: 5Rank: 5

金币
1185
好评
41
信誉
100

特殊荣誉MT论坛元老MT论坛荣誉管理MT论坛突出贡献MT论坛帅哥懒MT论坛新人挂机大佬2019-5.1节快乐2018国庆节2018王者荣耀2018MT论坛优秀成员2018国庆快乐考神MT论坛最佳新人

QQ
发表于 2018-5-28 17:18:24 来自手机  | 显示全部楼层  来自 河南
凉了。完全不会Java,,要补了。
回复

使用道具 举报

15

主题

5708

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
10149
好评
1
信誉
100
发表于 2018-5-28 21:54:53 来自手机  | 显示全部楼层  来自 广东
学习      
回复

使用道具 举报

207

主题

2344

回帖

6531

积分

硕士生

失败者

Rank: 6Rank: 6

金币
3123
好评
28
信誉
143

MT论坛大神2018国庆快乐2018国庆节2019-5.1节快乐

发表于 2018-5-29 00:01:20 来自手机  | 显示全部楼层  来自 江西
有什么Java学习方法推荐吗,我不会Java
回复

使用道具 举报

4

主题

393

回帖

1032

积分

高中生

Rank: 4

金币
44
好评
1
信誉
100
发表于 2018-5-29 00:42:23 来自手机  | 显示全部楼层  来自 广东
谢谢更新了
已有1人评分好评 理由
freedom + 1

查看全部评分 总评分:好评 +1 

回复

使用道具 举报

6

主题

3103

回帖

9299

积分

硕士生

Rank: 6Rank: 6

金币
6209
好评
1
信誉
102

MT论坛帅哥

发表于 2018-5-29 09:50:12 来自手机  | 显示全部楼层  来自 广东
受教了……
回复

使用道具 举报

4

主题

2378

回帖

6863

积分

硕士生

Rank: 6Rank: 6

金币
3507
好评
10
信誉
100

MT论坛帅哥考神

QQ
发表于 2018-5-29 10:24:39 来自手机  | 显示全部楼层  来自 江苏
学习了!!!!!!
回复

使用道具 举报

23

主题

786

回帖

2684

积分

大学生

Rank: 5Rank: 5

金币
1404
好评
7
信誉
100
QQ
发表于 2018-5-29 16:04:44 来自手机  | 显示全部楼层  来自 安徽
Tragic Life 发表于 2018-5-29 00:01
有什么Java学习方法推荐吗,我不会Java

有一个明日学院,论坛就搜的到
回复

使用道具 举报

8

主题

464

回帖

1573

积分

高中生

Rank: 4

金币
247
好评
0
信誉
100
发表于 2018-5-29 22:44:20 来自手机  | 显示全部楼层  来自 河南
真棒 !
回复

使用道具 举报

6

主题

170

回帖

432

积分

初中生

Rank: 3Rank: 3

金币
171
好评
0
信誉
100
发表于 2018-6-1 16:18:00 来自手机  | 显示全部楼层  来自 浙江
谢谢!学到了Bin神!你可以看下我的帖子然后顺手帮我解答一下嘛,您可以用虚拟机帮我看看嘛
回复

使用道具 举报

3

主题

36

回帖

135

积分

小学生

Rank: 2

金币
58
好评
0
信誉
100
发表于 2018-6-2 22:00:42 来自手机  | 显示全部楼层  来自 河北
6666666666
回复

使用道具 举报

39

主题

364

回帖

1273

积分

高中生

皮皮

Rank: 4

金币
320
好评
2
信誉
100
QQ
发表于 2018-6-3 22:44:33 来自手机  | 显示全部楼层  来自 广东
一窍不通
回复

使用道具 举报

23

主题

873

回帖

1947

积分

高中生

VIP12

Rank: 4

金币
28
好评
1
信誉
102

考神

QQ
发表于 2018-7-3 17:12:46 来自手机  | 显示全部楼层  来自 广东
沙发!           
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表