0x01 dalvik寄存器
32位,所有類(lèi)型, <=32一個(gè)寄存器
64位:使用兩個(gè)相鄰寄存器
0x02 寄存器的命名法:
v:局部變量寄存器 v0-vn 參數(shù)寄存器 vn-vn+m
p:參數(shù)寄存器p0 -pn 變量寄存器 v0-vn
0x03 dex文件反匯編工具
.java編譯成.class在編譯成.dex 最后反編譯得到samli文件
.java -->.class -->.dex -->samli
dx.jar ----- .class打包.dex
dx --dex --output=Decrypt.dex com/xxx/xxx/Decrypt.class
Baksamli.jar------- .dex反編譯成 samli
java -jar baksmali.jar -o smali_out/class.dex
Samli.jar-----.smali打包成.dex
java -jar smali.jar smali_out/ -o classes.dex
0x04 dalvik字節(jié)碼類(lèi)型
Dalvik | java |
---|---|
B | byte |
C | char |
S | short |
I | int |
J | long |
f | float |
D | double |
Z | boolean |
V | void |
L | java類(lèi)類(lèi)型 |
[ | 數(shù)組類(lèi)型 |
0x05 字段
表示的是成員變量
字段格式: 類(lèi)型(包名/類(lèi)名) ->字段名稱(chēng):字段類(lèi)型
Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;
相當(dāng)于
Package com.yjh
Class ObjectName{
String FieldName;
}
0x05 方法
字段格式: 類(lèi)型(包名/類(lèi)名) ->方法名方法的簽名信息
Lpackage/name/ObjectName;->MethodName(III)Z
(III)Z:這部分表示方法的簽名信息
相當(dāng)于
Package com.yjh
Class ObjectName{
public boolean MethodName(int a,int b ,int c){
}
}
0x06 dalvik指令格式
基礎(chǔ)字節(jié)碼-名稱(chēng)后綴/字節(jié)后綴 目的寄存器 源寄存器
名稱(chēng)后綴是wide,表示數(shù)據(jù)寬度為64位
字節(jié)碼后綴是from16,表示源寄存器為16位
move-wide/from16 vAA,vBBBB
move 為基礎(chǔ)字節(jié)碼,即opcode
wide 為名稱(chēng)后綴,標(biāo)識(shí)指令操作的數(shù)據(jù)寬度為64位
from16 為字節(jié)后綴,標(biāo)識(shí)源為一個(gè)16位的寄存器引用變量
VAA 為目的寄存器,它始終在源寄存器簽名,取值范圍為v0-v255
VBBBB 為源寄存器,取值范圍v0-65535
Dalvik指令集中大多數(shù)指令用到了寄存器作為目的操作數(shù)活源操作數(shù),其中
A/B/C/D/E/F/G/H 代表一個(gè)四位的數(shù)值,
AA/BB/.../HH 代表一個(gè)8位的數(shù)值,
AAAA/BBBB/.../HHHH 代表一個(gè)16位的數(shù)值
0x06 dalvik指令
- 空操作指令
nop
空操作指令的助記符為nop。它的值為00,通常nop指令被用來(lái)做對(duì)齊碼使用,無(wú)實(shí)際操作
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120377 -
編譯
+關(guān)注
關(guān)注
0文章
657瀏覽量
32872 -
安卓
+關(guān)注
關(guān)注
5文章
2130瀏覽量
57202
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論