java smali代码 解读_Smali代码语法

Smali是什么?

简介

Smali支持注解、调试信息、行数信息等基本Java的基本特性,可以说是很接近Java编译在JVM上的中间语言了,一般用来做Android程序的逆向工程

由于Smali是用于Dalvik和Art(Android虚拟机)的反汇编程序实现

APK文件>dex文件>smali文件>修改代码

所以smali语言是Dalvik的反汇编语言

B---byte

C---char

D---double

F---float

I---int

J---long

S---short

V---void

Z---boolean

[XXX---array

Lxxx/yyy---object

这里解析下最后两项,数组的表示方式是:在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;对象的表示则以L作为开头,格式是LpackageName/objectName;(注意必须有个分号跟在最后),例如String对象在smali中为:Ljava/lang/String;,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。

或许有人问,既然类是用LpackageName/objectName;来表示,那类里面的内部类又如何在smali中引用呢?答案是:LpackageName/objectName$subObjectName;。也就是在内部类前加“$”符号

二、函数的定义

函数的定义一般为:

Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type

参数与参数之间没有任何分隔符:

1. foo ()V

>>>>void foo()。

2. foo (III)Z

>>>>boolean foo(int, int, int)。

3. foo (Z[I[ILjava/lang/String;J)Ljava/lang/String;

>>>>String foo (boolean, int[], int[], String, long)

Smali 格式结构

.class [修饰关键字] .super .source

1 .class public Lcom/disney/WMW/WMWActivity;#是com.disney.WMW这个package下的一个类

2 .super Lcom/disney/common/BaseActivity;#继承自com.disney.common.BaseActivity

3 .source "WMWActivity.java"#这是一个由WMWActivity.java编译得到的smali文件4

5 # interfaces接口信息6 .implements Lcom/burstly/lib/ui/IBurstlyAdListener;#这个WMWActivity实现了一个com.burstly.lib.ui这个package下(一个广告SDK)的IBurstyAdListener接口。

7

8 # annotations内部类9 .annotation system Ldalvik/annotation/MemberClasses;10 value = {#有两个成员内部类11 Lcom/disney/WMW/WMWActivity$MessageHandler;,

12 Lcom/disney/WMW/WMWActivity$FinishActivityArgs;13 }14 .end annotation15

由此可以的出源java文件

class WMWActivity extends BaseActivity implementsIBurstlyAdListener{//... 继承 接口

classMessageHandler {//...

}classFinishActivityArgs{//...

}

}

# static fields静态域

.field private static final PREFS_INSTALLATION_ID:Ljava/lang/String; = "installationId"# instance fields实例域

.fieldprivate _activityPackageName:Ljava/lang/String;

static fields和instance fields均为成员变量

instance field 是对象的变量,每一个这个类的对象都会有一个该instance field

#

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值