smali语法之方法与字段
来源:互联网 发布:伊辛模型 知乎 编辑:程序博客网 时间:2024/05/17 04:06
1、基本介绍
之前我们介绍过smali语法格式中的数据类型,包括基本数据类型,与引用数据类型(对象与数组),今天我们再介绍一下语法中的方法与字段。
2、方法
方法的表现形式为:
Lpackage/name/ObjectName;——>methodName(III)Z解释说明:
Lpackage/name/ObjectName 表示类型
methodName 表示方法名
III 表示参数(这里表示为3个整型参数)
举例说明:
这里以Android开发中常见的onDestory()方法为例,这里是该方法的smali形式:
.method protected onDestroy()V.locals 0.prologue.line 277invoke-super {p0}, Lcom/disney/common/BaseActivity;->onDestroy()V.line 279return-void.end method
注意:方法的参数是一个接一个的,中间没有隔开;
3、字段
字段的表示形式:
Lpackage/name/ObjectName;——>FieldName:Ljava/lang/String;解释说明:
Lpackage/name/ObjectName;包名
FieldName:字段名
Ljava/lang/String;字段类型
举例说明:
java形式:public String url;smali形式:.field public url:Ljava/lang/String;
4、完整示例
这里提供一个简单的带有方法的Hello类,通过反编译为smali类型,对比说明上面的解释:
Hello.java的源码如下所示:
public class Hello{public int fun(int a,int b){return (a+b)*(a-b);}public static void main(String[] args){Hello hello = new Hello();System.out.println(hello.fun(5,3));}}Hello.smali的源码格式如下所示:
.class public LHello;.super Ljava/lang/Object;.source "Hello.java"# direct methods.method public constructor <init>()V .registers 1 .prologue .line 1 invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void.end method.method public static main([Ljava/lang/String;)V .registers 5 .prologue .line 7 new-instance v0, LHello; invoke-direct {v0}, LHello;-><init>()V .line 8 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; const/4 v2, 0x5 const/4 v3, 0x3 invoke-virtual {v0, v2, v3}, LHello;->fun(II)I move-result v0 invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V .line 9 return-void.end method# virtual methods.method public fun(II)I .registers 5 .prologue .line 3 add-int v0, p1, p2 sub-int v1, p1, p2 mul-int/2addr v0, v1 return v0.end method
5、总结分析
Hello.smali中除了我们提到的数据类型,方法和字段之外,还涉及到了一些寄存器等方面的知识,但是这不是我们本次博文所讨论的重点,一次只要知晓一个知识点便可。在下一篇博文中,笔者将重点向读者介绍smali语法格式中的寄存器以及其他内容!
0 0
- smali语法之方法与字段
- Smali语法:数据类型、方法和字段
- smali语法之数据类型
- smali语法之指令学习
- SMALI语法
- smali语法
- smali语法
- smali语法
- smali语法
- Smali语法
- Smali语法
- smali语法
- smali语法
- smali语法
- smali语法
- Smali语法
- smali语法
- smali语法
- C#获取硬件信息
- Hibernate实现最基本的增删改查
- yii 在试图中获取控制器 方法的例子
- 看好iPhone 6的七个不得不承认原因
- Lua 编译
- smali语法之方法与字段
- chapter 11, 12 UDP TCP
- HashMap和HashSet原理及底层实现
- Cadence Allegro中为铜皮添加VIA并分配网络
- Java SE初步总结
- Windows Server 2012 活动目录部署系列(一) 域创建
- 数据结构(C实现)------- 顺序队列(非循环队列)
- 3-2 构造函数的调用
- 字符设备驱动程序之中断方式的按键驱动