Dalvik指令集
类型
| 语法 | 含义 |
| 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指令集的更多相关文章
- 用Dalvik指令集写个java类
Dalvik指令集 .class public LCalculate;#定义类名 .super Ljava/lang/Object;#定义父类 .method public static main([ ...
- [转载]Dalvik指令集
这篇文章是转载的,为了便于查找一些指令,贴在这里. 转自:http://blog.csdn.net/canfengxiliu/article/details/20144119 ------------ ...
- Android Dalvik 虚拟机
简介 Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准java虚拟机上的.谷歌专门为Android平台设计了一套虚拟机来运行Android程序.它就是Da ...
- Android逆向基础----Dalvik字节码
参考此微博,更多详细内容可以到这里查看 http://blog.csdn.net/dd864140130/article/details/52076515 Dalvik字节码 1.寄存器位32位,64 ...
- Android开发——JVM、Dalvik以及ART的区别【转帖】
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52354964 0. 前言 Dalvik是Google公司自己设计用于Android平 ...
- Android: samil语法指令集-基于dex文件结构的寄存器虚拟机
Smali文件结构解 Smali文件与java中的类是一一对应的,包括内部类和匿名内部类也会生成对应的smali文件(典型的比如实现某个接口的匿名内部类),所以你会看到.smali文件比.java ...
- Android Dalvik、ART及APK编译过程
0.1 先对Dalvik以及ART做简单介绍: 什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.dex格式是专为Dalvik应用设计的一种压缩格式, ...
- Android方法数不能超过65535
为什么方法数不能超过65535?搬上Dalvik工程师在SF上的回答,因为在Dalvik指令集里,调用方法的invoke-kind指令中,method reference index只给了16bits ...
- Android逆向之smali学习
Smali是Android虚拟机Dalvik反汇编的结果. Dalvik指令集 指令格式为:[op]-[type](可选)/[位宽,默认4位] [目标寄存器],[源寄存器](可选) 赋值:move* ...
随机推荐
- phpcms V9 联动菜单的调用
/*********************************** 通过id获取显示联动菜单的 顶级父类的名称* @param $linkageid 联动菜单id* @param $keyi ...
- How to install MP4box on CentOS 6
How to install MP4box on CentOS 6 MP4Box is a MP4 multiplexer. It can import MPEG-4 video, DivX, Xvi ...
- GetMenu返回0解决方法
在CMainFrame类中找到CMFCMenuBar m_wndMenuBar;这个成员变量,将跟它相关的代码注释掉的话,然后运行,OK.
- d3可视化实战00:d3的使用心得和学习资料汇总
最近以来,我使用d3进行我的可视化工具的开发已经3个月了,同时也兼用其他一些图表类库,自我感觉稍微有点心得.之前我也写过相关文章,我涉及的数据可视化的实现技术和工具,但是那篇文章对于项目开发而言太浅了 ...
- VMware虚拟机ping出现DUP!
VMware虚拟机ping出现DUP! ping 外网, 还是ping 网关都出现DUP! 百度查了许久,各种方法都无效,无奈只能google看老外的方法. http://codeblog.co. ...
- NMAP扫描UDP123NTP端口详解
我用的nmap版本:Zenmap 6.25 例如命令: nmap -sU -pU:123 -Pn -n --script=ntp-monlist IP 如果要批量进行,可以把IP存放在ip.txt可以 ...
- 用MySQL创建数据库和数据库表
1.使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql ...
- FMX手机app,如何下载网站图片而不卡界面
你用的版本? 你应该关注下delphi 更新说明第一方法: 可以用线程.第二方法: TNetHTTPClient 已经支持异步 TThread.CreateAnonymousThread( proce ...
- mono环境变量
mono环境变量 2013-05-11 01:14:33| 分类: mono|举报|字号 订阅 下载LOFTER我的照片书 | Name mono - Mono's ECMA-CL ...
- 为何某些公司不允许使用C++ STL?
说几个STL的缺点吧,虽然都是在比较极端的情况下出现,但是对于一些大项目还是会遇到的 1. 代码膨胀问题每一个实例化过的模板类,都会膨胀出一份独立的代码,比如std::vector<std::s ...