smail格式

Smali代码是Android的Dalvik虚拟机的可执行文件DEX文件反汇编后的代码。所以Smali语言就是Dalvik的反汇编语言。?

使用Apktool反编译apk?文件后,会在反编译工程目录下生成一个smali?文件夹,里面存放着所有反编译出的smali?文件,这些文件会根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali?文件

Smali语法格式可参考:

http://bbs.pediy.com/showthread.php?p=1117963

通过dex文件,我们可以反编译生成对应的smail,我们看下前面dex文件对应的smail文件

.class public LTest2;
.super Ljava/lang/Object;
.source "Test2.java"

.field public final static mStatic:I = 1111111111

.field public static mStatic2:I

.field public anum:I

.field public minstance:Ljava/lang/String;

.method static constructor <clinit>()V
  .registers 1
  .prologue
  .line 7
    const v0, 222222222
    sput v0, LTest2;->mStatic2:I
    return-void
.end method

.method public constructor <init>()V
  .registers 2
  .prologue
  .line 5
    invoke-direct { p0 }, Ljava/lang/Object;-><init>()V
  .line 8
    const-string v0, "asdf"
    iput-object v0, p0, LTest2;->minstance:Ljava/lang/String;
  .line 9
    const/4 v0, 1
    iput v0, p0, LTest2;->anum:I
    return-void
.end method

.method public static main([Ljava/lang/String;)V
  .registers 3
  .prologue
  .line 14
    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
    const-string v1, "Hello, world"
    invoke-virtual { v0, v1 }, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
  .line 15
    return-void
.end method
可以看到smail文件还是比较直观的
可以看到,final形 成员变量是在初始化之前就初始化的

static形成员变量是在<clinit>中初始化的

非static形成员变量是在<init>函数中初始化的

这里有三个函数

<clinit>:在jvm第一次加载class文件时调用,包括静态变量初始化语句和静态块的执行
<init>:在实例创建出来的时候调用,包括调用new操作符;调用Class或Java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;通过java.io.ObjectInputStream类的getObject()方法反序列化

具体的指令可以参考如下连接

http://blog.csdn.net/dd864140130/article/details/52076515

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值