Smali语法学习三

寄存器与变量

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

v1:第二个本地寄存器函数

v2 p0(this)性能

v3 p1 第一个参数this

固然,若是是静态方法,就只有5个寄存器,不须要存this。code

.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代码:get

.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
相关文章
相关标签/搜索