Smali语法学习三
2017-02-06 00:00
232 查看
摘要: 寄存器与变量,方法指令,方法的定义
v0:第一个本地寄存器
v1:第二个本地寄存器
v2 p0(this)
v3 p1 第一个参数
当然,如果是静态方法,就只有5个寄存器,不需要存this。
.registers使用这个指令指定方法中寄存器的总数
.locals使用这个指令指定方法中非参寄存器总数,放在方法第一行。
对应的smali代码:
寄存器与变量
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
相关文章推荐
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- smali语法学习笔记
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali语法学习五
- Smali语法学习四
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali语法学习六
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Android-smali语法学习
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali语法学习二
- Smali语法学习一
- smali语法之指令学习
- Android学习心得(6) --- smali语法学习
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- smali 语法学习历程