Dalvik指令
指令語法由指令的位描述和指令格式標識來決定
每16位的字採用空格分割開來
每個字母表示四位,按從高字節到低字節,每四位可用|來表示不同的內容
A-Z的單個大寫字母作爲一個4位操作碼,op表示一個8位的操作碼
“Ø”來表示這字段所有位爲0值
如 A|G|op BBBB F|E|D|C 第一個16位爲A|G|op,其中A|G爲高8位,op操作碼爲低8位
BBBB 表示一個16位的偏移值 F|E|D|C共四個字節,表示寄存器參數
指令格式標識
- 大多由三個字符組成,前兩個數字,最後一個是字母
- 第一個表示指令有多少個16位的字
- 第二個表示指令有多少個寄存器、
- 字母表示類型碼
有一種特殊的情況是最後末尾多出一個字母,s表示採用靜態鏈接,i表示內聯處理
助記符 位大小 說明
b 8 8位有符號立即數
c 16,32 常量池索引
f 16 接口常量(僅對靜態鏈接格式有效)
h 16有符號立即數(32位或64位數的高值位,低值位爲0)
i 32 立即數,有符號整數或32位浮點數
l 64立即數,有符號整數或64位雙精度浮點數http://
m 16 方法常量(僅對靜態鏈接格式有效)
n 4 4位的立即數
s 16 短整型立即數
t 8,16,32 跳轉、分支
x 0 無額外數據
關於Dalvik字節碼解析可參考Bytecodefor the Dalvik VM和DalvikVM Instruction Formats,一個是指令的位描述表,一個是指令的語法格式表.
來自 <http://blog.csdn.net/q327611906/article/details/50012869>
http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html
http://www.netmite.com/android/mydroid/dalvik/docs/instruction-formats.html