Smali基本语法(一)

Note that: 需要安卓开发的基础知识.

这个课题,将会拆成几篇,向你讲解一些基本的Smali语法。我会先向你展示一些原样的Java代码。再展示反编译后,对应的Smali代码。通过二者的对比,来一 一的进行定义讲解。

一、类定义:
我们来看一下,android中最基本的类定义,这里以一个基础的MainActivity为样版。
Java代码
如图所示,我们可以得出以下这些信息:
1、这是一个公有的类。
2、类名叫MainActivity。
3、继承自AppCompatActivity.
接下来,我们来看一下,反编译后,对应的Smali代码是什么样的。
Smali代码
如图所示,我们可以得出以下这些信息:

1、.class表示,这是一个类,后面的public,代表其是公有的,即该类的访问权限。
2、类名, 是以完整包名的形式展示的。
3、.super表示,这是一个父类, 类名同样是,以完整包名的形式展示的。
4、.source表示,该类所在的文件名为MainActivity.java。
5、L,完整包名前的这个修饰符,表示这是一个对象类型。
6、;,分号放于对象类型的结尾,类似于Java的一条语句的结尾,一样是必须的。

从上所述,我们可以得出以下总结:

1、.class <访问权限> <关键修饰字> <类名;>
2、.super <关键修饰字> <父类名;>
3、.source <源文件名>

二、成员变量(类字段)定义:
同样地,让我们先看一下成员变量定义部分的代码。
Java Code
如图所示,我们可以得出以下这些信息:

1、有一个私有的、类型为String、变量名为stringType的成员变量。
2、有一个保护的、类型为int、变量名为intType的成员变量。
3、有一个公有的、类型为boolean、变量名为booleanType的成员变量。

接下来,我们来看一下,反编译后,对应的Smali代码是什么样的。
Smali Code

如图所示,我们可以得出以下这些信息:

1、注释, 注释由#开头,后面的instance fields, 意为实例的字段,即成员变量字段。
2、.field表示,这是一个字段。 public,代表公有的,booleanType,是变量名。:Z,是变量的类型.

从上所述,我们可以得出以下总结:

1、注释,由#开头,后面跟的instance fields, 是解释下面的内容是什么
2、.field <访问权限> <变量名> <变量类型>

关于变量类型,由Java代码转为Smali的列表,我将放在文章的最底部,以供参考。

三、方法的定义:

同样地,让我们先看一下成员变量定义部分的代码。

这里写图片描述

如图所示,我们可以得出以下这些信息:

有一个私有的、返回类型为void、方法名为onPrivateMethod的方法。

接下来,我们来看一下,反编译后,对应的Smali代码是什么样的。

这里写图片描述

如图所示,我们可以得出以下这些信息:

1、.method表示, 这是一个方法。private,访问权限。onPrivateMethod,,方法名。V,返回类型。

参考资料

变量类型的转换

B—byte
C—char
D—double
F—float
I—int
S—short
V—void
J—long
Z—boolean

比较运算符

eq:  equals 
ne:  not equals

lt:  less than
gt:  bigger than

le:  less and equals
ge:  bigger and equals

eqz:  equals zero
nez:  not equals zero

ltz:  less than zero
btz:  bigger than zero

gez:  bigger and equals zero lez:  less and equals zero
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值