类型

语法 含义
V void,只用于返回值类型
Z boolean
B byte
S short
C char
I int
J long
F float
D double
L Java类类型
[ 数组类型

方法

方法格式:Lpackage/name/ObjectName;->MethodName(III)Z

Lpackage/name/ObjectName 所属类

MethodName 方法名

III 方法的参数(三个整型参数)

Z 方法的返回类型(boolean类型)

字段(变量)

Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

Lpackage/name/ObjectName 所属类

FieldName 字段名

Ljava/lang/String; 字段类型

空操作指令

nop

数据操作指令

返回指令

数据定义指令

数据定义指令用来定义程序中用到的常量、字符串、类等数据。基础字节码为const

"const/4vA,#+B" 将数值符号扩展为32位后赋给寄存器vA。

"const/16 VAA,#+BBBB" 将数值符号扩展为32位后赋给寄存器vAA。

"const vAA,#+BBBBBBBB" 将数值赋给寄存器vAA。

"const/hight16 vAA,#+BBBB0000" 将数值右边零扩展为32位后赋给寄存器vAA。

#"const-wide/16 vAA,#+BBBB" 将数值符号扩展为64位后赋给寄存器对vAA。

#"const-wide/32 vAA,#+BBBBBBBB" 将数值符号扩展为64位后赋给寄存器对vAA。

"const-wide vAA,#+BBBBBBBBBBBBBBBB" 将数值赋给寄存器对vAA。

"const-wide/high16 vAA,#+BBBB000000000000" 将数值右边零扩展为64位后赋给寄存器对vAA

"const-string vAA,string@BBBB" 通过字符串索引构造一个字符串并赋给寄存器vAA。

"const-class vAA,type@BBBB" 通过类型索引获取一个类引用并赋给寄存器vAA。

"const-class/jumbo vAAAA,type@BBBBBBBB" 通过给定的类型索引获取一个类引用并赋给寄存器vAAAA。这条指令占用俩个字节,值为0x00ff(Android 4.0 新增)

锁指令

实例操作指令

数据操作指令

异常指令

跳转指令

比较指令

字段操作指令

方法调用指令

调用类实例的方法,基础指令为invoke

形式:"invoke-king{vC,vD,vE,vF,vG},mesh@BBBB"和"invoke-kind/range{vCCCC..vNNNN},mesh@BBBB"

后者在设置参数寄存器时使用了range来指定寄存器的范围。

"invoke-virtual"或"invoke-virtual/range" 调用实例的虚方法。

"invoke-super"或"invoke-super/range" 调用实例的父方法。

"invoke-direct"或"invoke-direct/range" 调用实例的直接方法。

"invoke-static"或"invoke-static/range" 调用实例的静态方法。

"invoke-interface"或"invoke-interface/range" 调用实例的接口方法。

Android4.0新增"invoke-kind/jumpbo{vCCCC..vNNN},mesh@BBBBBBBB"—寄存器值与指令的索引取值范围更大。

方法调用的返回值必须使用move-result*指令来获取。

invoke-static{},Landroid/os/Parcel;->obtain()Landroid/os/Parcel;

move-resule-object v0

数据转换指令

数据运算指令

AA

Dalvik指令集的更多相关文章

  1. 用Dalvik指令集写个java类

    Dalvik指令集 .class public LCalculate;#定义类名 .super Ljava/lang/Object;#定义父类 .method public static main([ ...

  2. [转载]Dalvik指令集

    这篇文章是转载的,为了便于查找一些指令,贴在这里. 转自:http://blog.csdn.net/canfengxiliu/article/details/20144119 ------------ ...

  3. Android Dalvik 虚拟机

    简介 Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准java虚拟机上的.谷歌专门为Android平台设计了一套虚拟机来运行Android程序.它就是Da ...

  4. Android逆向基础----Dalvik字节码

    参考此微博,更多详细内容可以到这里查看 http://blog.csdn.net/dd864140130/article/details/52076515 Dalvik字节码 1.寄存器位32位,64 ...

  5. Android开发——JVM、Dalvik以及ART的区别【转帖】

    转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52354964 0. 前言 Dalvik是Google公司自己设计用于Android平 ...

  6. Android: samil语法指令集-基于dex文件结构的寄存器虚拟机

    Smali文件结构解   Smali文件与java中的类是一一对应的,包括内部类和匿名内部类也会生成对应的smali文件(典型的比如实现某个接口的匿名内部类),所以你会看到.smali文件比.java ...

  7. Android Dalvik、ART及APK编译过程

    0.1 先对Dalvik以及ART做简单介绍: 什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.dex格式是专为Dalvik应用设计的一种压缩格式, ...

  8. Android方法数不能超过65535

    为什么方法数不能超过65535?搬上Dalvik工程师在SF上的回答,因为在Dalvik指令集里,调用方法的invoke-kind指令中,method reference index只给了16bits ...

  9. Android逆向之smali学习

    Smali是Android虚拟机Dalvik反汇编的结果. Dalvik指令集 指令格式为:[op]-[type](可选)/[位宽,默认4位] [目标寄存器],[源寄存器](可选) 赋值:move*  ...

随机推荐

  1. JGraph

    php中JPGraph入门配置与应用 什么是PHP JPGraph?专门提供图表的类库.它使得作图变成了一件非常简单的事情.生成非美工人士生成的图表.二维码算法. 到官方网站下载.docportal ...

  2. 按钮点击效果jquery

    <html><head> <meta charset="UTF-8"> <title>QQ</title> <me ...

  3. 【结构型】Proxy模式

    代理模式是指为其他对象提供代理来控制对象的访问.这种手段有时候可以给我们带来许多好处.如:通过代理可以实现异步响应处理:通过代理可以起到保护或限制对象的使用的作用,从而提高安全性. 在设计上,用户使用 ...

  4. Mysql删除表名中有特殊字符的表

    由于公司业务和应用的调整,之前在Mysql中的很多表都不需要了,故需要对数据库进行整理.   刚开始,我在想:不就删除一些表吗?很好解决,写个简单的脚本就可以了.我先看了数据库中有80000多个表,很 ...

  5. Linux_service cloudera-scm-server start failed

    see log : /var/log/cloudera-scm-server/cloudera-scm-server.log

  6. 提取所有mtk机型的线刷包

    首先手机root且安装busybox和超级终端软件,这里不提供自己百度一大堆 一.制作scatter 示范 PRELOADER 0x0 { } MBR 0x600000 { } EBR1 0x6800 ...

  7. file_get_content、fsockopen和curl之间的优缺点

    file_get_content 优点:在抓取单个文件上,效率很高,返回没有头信息的文件. 缺点:在抓取远程文件时,和fopen一样容易出错.在抓取多个跨域文件时,未对DNS进行缓存,所以效率上不不高 ...

  8. poj 3335 Rotating Scoreboard

    http://poj.org/problem?id=3335 #include <cstdio> #include <cstring> #include <algorit ...

  9. BZOJ 2300 防线修建

    http://www.lydsy.com/JudgeOnline/problem.php?id=2300 题意:给点,有以下操作:删去一个点,询问这些点构成凸包的周长. 思路:用splay维护上凸壳, ...

  10. 51单片机C语言学习笔记8:单片机C51编程规范

    1.单片机C51编程规范- 前言  为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范. 2.单片机C51编程规范-范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范.本 ...