日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Smali語法

 狂月疏星 2016-04-06

Smali語法:數(shù)據(jù)類型、方法和字段

數(shù)據(jù)類型
dalvik字節(jié)碼有兩種類型,原始類型和引用類型。對象和數(shù)組是引用類型,其它都是原始類型。

smali數(shù)據(jù)類型都是用一個字母表示,如果你熟悉Java的數(shù)據(jù)類型,你會發(fā)現(xiàn)表示smali數(shù)據(jù)類型的字母其實是Java基本數(shù)據(jù)類型首字母的大寫,除boolean類型外,在smail中用大寫的”Z”表示boolean類型。

V void,只能用于返回值類型
Z boolean
B byte
S short
C char
I int
J long (64 bits)
F float
D double (64 bits)

對象以Lpackage/name/ObjectName;的形式表示。前面的L表示這是一個對象類型,package/name/是該對象所在的包,ObjectName是對象的名字,“;”表示對象名稱的結(jié)束。相當(dāng)于java中的package.name.ObjectName。

例如:Ljava/lang/String;相當(dāng)于java.lang.String

數(shù)組的表示形式?

[I——表示一個整型一維數(shù)組,相當(dāng)于java中的int[]。? 對于多維數(shù)組,只要增加[就行了。[[I相當(dāng)于int[][],[[[I相當(dāng)于int[][][]。注意每一維的最多255個。?

對象數(shù)組的表示

[Ljava/lang/String;表示一個String對象數(shù)組。

方法

方法通常必須詳細(xì)的指定方法類型(?the type that contains the method) 方法名,參數(shù)類型,返回類型,所有這些信息都是為虛擬機(jī)是能夠找到正確的方法并執(zhí)行。

方法表示形式:Lpackage/name/ObjectName;->MethodName(III)Z?

在上面的例子中,Lpackage/name/ObjectName;表示類型,MethodName是方法名。III為參數(shù)(在此是3個整型參數(shù)),Z是返回類型(bool型)。?

方法的參數(shù)是一個接一個的,中間沒有隔開。

一個更復(fù)雜的例子:method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

在java中則為:String method(int, int[][], int, String, Object[])

一個比較全面的例子:

.class public interface abstract Lcom/kit/network/CachableImage;
.super Ljava/lang/Object;
.source 'SourceFile'

virtual methods

.method public abstract getIsLarge()Z
.end method

.method public abstract getUrl()Ljava/lang/String;
.end method

.method public abstract getViewContext()Landroid/content/Context;
.end method

.method public abstract setBitmap(Landroid/graphics/Bitmap;Z)V
.end method

.method public abstract setIsLarge(Z)V
.end method

.method public abstract setUrl(Ljava/lang/String;)V
.end method上面的smali代碼還原后的java代碼為:

//#注:在實際代碼中我們還必須引入相關(guān)的包
import android.content.Context;
import android.graphics.Bitmap;

public interface CachableImage {

public abstract boolean getIsLarge();

public abstract String getUrl();

public abstract Context getViewContext();

public abstract void setBitmap(Bitmap bitmap);

public abstract void setIsLarge(boolean islarge);

public abstract void setUrl(String url);
}

字段

表示形式:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;即包名,字段名和各字段類型。 eg:

.field private _requestLayout:Z

.field public isLarge:Z

.field public resize:Z

.field public thumbnailSize:I

.field public url:Ljava/lang/String;還原后的java代碼為:

public boolean _requestLayout;
public boolean isLarge;
public boolean resize;
public int thumbnailSize;
public String url;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多