【安卓逆向】---smail代碼閱讀-Dalvik字節碼

數據類型

Java數據類型 dalvik數據類型
int I
byte B
char C
double D
float F
long J
short S
void V
boolean Z
array [
object L

最後的數據和對象數據類型舉例:

[I ---> int[]

Ljava/lang/String; ----> java.lang.String

即:L包名/對象名; 如果是內部類:LpackageName/objectName$subObjectName;

 


函數定義(語法)

   1.賦值 move   -wide、-object、-result、-result-wide、-result-object、-exception 、/from16 、/16

例如,在指令“move-wide/from16 vAA, vBBBB”中:

  • move”爲基礎運算碼,表示這是基本運算(移動寄存器的值)。
  • wide”爲名稱後綴,表示指令對較寬(64 位)數據進行運算。
  • from16”爲運算碼後綴,表示具有 16 位寄存器引用源的變體。
  • vAA”爲目標寄存器(隱含在運算中;並且,規定目標參數始終在前),取值範圍爲 v0 - v255
  • vBBBB”爲源寄存器,取值範圍爲 v0 - v65535

   2.返回 return -void、-wide、-object

例如,在指令“return-wide vAA”中:

  • “return”爲方法返回。
  • “wide”爲名稱後綴,表示指令對較寬(64 位)數據進行運算。
  • “vAA”爲目標寄存器(隱含在運算中;並且,規定目標參數始終在前),取值範圍爲 v0 - v255

   3.移值 const  -wide、-string、-class、/jumbo、/high16、/32、/16、/high16、/4 

例如,在指令“const-wide/16 vAA, #+BBBB”中:

  • “const”將給定的字面值移到指定的寄存器對中。
  • “wide”爲名稱後綴,表示指令對較寬(64 位)數據進行運算。
  • “/16” 爲有符號整數(16 位)。
  • “vAA”爲目標寄存器(隱含在運算中;並且,規定目標參數始終在前),取值範圍爲 v0 - v255
  • “#+BBBB” 爲有符號整數(16 位)。

   4.對象鎖 monitor  -enter、-exit (獲取、釋放)

例如,在指令“monitor-exit vAA”中:

  • 釋放指定對象的監視鎖。

   5.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章