您的位置:首页 > 其它

Smali语法学习三

2017-02-06 00:00 232 查看
摘要: 寄存器与变量,方法指令,方法的定义

寄存器与变量

Java中的变量都是放在内存中的,安卓为了提高性能,变量都是放在寄存器中的。寄存器为32位,可以支持任何类型。其中long和double这种64为的类型需要两个寄存器保存。寄存器采用v和p来命名,v表示本地寄存器,p表示参数寄存器,关系如下:
v0:第一个本地寄存器

v1:第二个本地寄存器

v2 p0(this)

v3 p1 第一个参数

当然,如果是静态方法,就只有5个寄存器,不需要存this。

.registers使用这个指令指定方法中寄存器的总数

.locals使用这个指令指定方法中非参寄存器总数,放在方法第一行。

方法指令

.field private isFlag:z    #定义变量
.methd                          #方法
.parameter                    #方法参数
.prologue                      #方法开始
.line 12                         #此方法位于第12行

invoke-direct                #调用函数

return-void                   #返回void

.end method                #函数结束

new-instence               #创建实例
input-object                 #对象赋值

iget-object                    #调用对象

invoke-static                #调用静态函数

方法的定义

private static int sum(int a, int b) {
return a+b;
}

对应的smali代码:

.method private static sum(II)I
.locals 4 #表示需要申请4个本地寄存器
.parameter
.parameter #这里表示有两个参数
.prologue
.line 27

move v0, p0
.local v0, a:I

move v1, p1
.local v1, b:I

move v2, v0

move v3, v1

add-int/2addr v2, v3

move v0, v2
#
.end local v0

return v0
#
.end method
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: