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
相關文章
相關標籤/搜索