初識[android逆向] smali吃引,煩請各位大佬多多海涵,小萌新一枚刽锤。
smali文件:
無論是普通類镊尺、抽象類、接口類或者內(nèi)部類并思,在反編譯出的代碼中庐氮,它 們都以單獨的smali 文件來存放。每個 smali 文件都由若干條語句組成, 所有的語句都遵循著一套語法規(guī)范宋彼。
1.描述類的信息
.class < 訪問權(quán)限> [ 修飾關(guān)鍵字] < 類名>
.super < 父類名>
.source <源文件名>
2. 靜態(tài)字段
? #stantic fields
.field < 訪問權(quán)限> static [ 修飾關(guān)鍵字] < 字段名>:< 字段類型>
3.實例字段
? #instance fields
.field < 訪問權(quán)限> [ 修飾關(guān)鍵字] < 字段名>:< 字段類型>
4.直接方法
#direct methods
.method <訪問權(quán)限> [ 修飾關(guān)鍵字] < 方法原型>
<.locals> “.locals ”指定了使用的局部變量的個數(shù)
[.param] “.param”指定了方法的參數(shù)
[.prologue] “.prologue ”指定了代碼的開始處
[.line] ? ? ? ? “.line ”指定了該處指令在源代碼中的行號
<代碼體>
.end method
5. 虛方法的聲明與直接方法相同弄砍,只是起始處的注釋為“virtual methods”。
6.接口
# interfaces
? .implements < 接口名>“.implements ”是接口關(guān)鍵字宙暇,后面的接口
? 名是 DexClassDef 結(jié)構(gòu)中 interfacesOff 字段指定的內(nèi)容输枯。
7.注解
? # annotations
? .annotation [ 注解屬性] < 注解類名>
[ 注解字段 = 值]
? .end annotation
? 注解的作用范圍可以是類、方法或字段占贫。如果注解的作用范圍是類桃熄,? “.annotation ”指令會直接定義在 smali 文件中,如果是方法或字段,“.annotation ”指令則會包含在方法或字段定義中瞳收。