参考此微博,更多详细内容可以到这里查看

http://blog.csdn.net/dd864140130/article/details/52076515

Dalvik字节码

1、寄存器位32位,64位数据(double)用两个相邻的32寄存器表示。

2、两种类型:基本类型和引用类型(对象和数组)

全限定名是什么?

以String为例,其完整名称是Java.lang.String,那么其全限定名就是java/lang/String;,即java.lang.String的”.”用”/”代替,并在末尾添加分号”;”做结束符.

Dalvik字节码类型描述符

V     void               只能用于返回值类型

Z     boolean         逻辑值,返回真(true)假(false)

B     byte              字节型

S     short             短整型

C     char              字符型

I      int                 整数型

J      long(64位)长整型

F     float              浮点型

D     double          双精度浮点

L     对象类型,java类

java->package.name.ObjectName;

Davik->Lpackage/name/ObjectName

[      数组类型

java->int[]     int[][]      三维数组

Davik->[I;      [[I;   [[[I;

字段的描述

Davik中对字段的描述分为两种,对基本类型字段的描述和对引用类型的描述,但两者的描述格式一样:

对象类型描述符->字段名:类型描述符;

比如com.sbbic.Test类中存在String类型的name字段及int类型的age字段,那么其描述为:

Lcom/sbbic/Test;->name:Ljava/lang/String;

Lcom/sbbic/test;->age:I

Dalvik指令集

数据定义指令      const

const-赋值方法 寄存器名 附加内容

指令

描述

const/4 vA,#+B

将数值符号扩展为32后赋值给寄存器vA

const-wide/16 vAA,#+BBBB

将数值符号扩展为64位后赋值个寄存器对vAA

const-string vAA,string@BBBB

通过字符串索引高走字符串赋值给寄存器vAA

const-class vAA,type@BBBB

通过类型索引获取一个类的引用赋值给寄存器vAA

数据操作指令      move

指令

描述

move vA,vB

将vB寄存器的值赋值给vA寄存器,vA和vB寄存器都是4位

move/from16 vAA,VBBBB

将vBBBB寄存器(16位)的值赋值给vAA寄存器(7位),from16表示源寄存器vBBBB是16位的

move/16 vAAAA,vBBBB

将寄存器vBBBB的值赋值给vAAAA寄存器,16表示源寄存器vBBBB和目标寄存器vAAAA都是16位

move-object vA,vB

将vB寄存器中的对象引用赋值给vA寄存器,vA寄存器和vB寄存器都是4位

move-result vAA

将上一个invoke指令(方法调用)操作的单字(32位)非对象结果赋值给vAA寄存器

move-result-wide vAA

将上一个invoke指令操作的双字(64位)非对象结果赋值给vAA寄存器

mvoe-result-object vAA

将上一个invoke指令操作的对象结果赋值给vAA寄存器

move-exception vAA

保存上一个运行时发生的异常到vAA寄存器

3.跳转指令

if-eq

等于则跳转

==

if-ne

不等于则跳转

!=

if-lt

小于则跳转

<

if-ge

大于或等于则跳转

>=

if-gt

大于则跳转

>

if-le

小于或等于则跳转

<=

goto

无条件跳转

switch

分支跳转

返回0 实现跳转

Android逆向基础----Dalvik字节码的更多相关文章

  1. Android逆向基础----Android Dalvik虚拟机

    Android Dalvik虚拟机的特点: l  体积小,占用内存空间小. l  专有DEX可执行文件. l  常量池采用32位索引值,寻址类方法名,字段名,常量更快. l  基于寄存器架构,并拥有一 ...

  2. APK反编译之一:基础知识—APK、Dalvik字节码和smali文件

    refs: APK反编译之一:基础知识http://blog.csdn.net/lpohvbe/article/details/7981386 APK反编译之二:工具介绍http://blog.csd ...

  3. 安卓逆向学习---初始APK、Dalvik字节码以及Smali

    参考链接:https://www.52pojie.cn/thread-395689-1-1.html res目录下资源文件在编译时会自动生成索引文件(R.java ), asset目录下的资源文件无需 ...

  4. 4. 如何解释dalvik字节码

    如何解释dalvik字节码 文档: 在Android系统源码目录dalvik\docs有相关指令文档 dalvik-bytecode.html 实战: 来直接实战模拟来理解枯燥的理论 用IDA打开一个 ...

  5. 【腾讯内部干货分享】分析Dalvik字节码进行减包优化

    http://wetest.qq.com/lab/view/?id=96?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.192184.TAS ...

  6. Android逆向基础----APK文件结构

    参考这个博客 http://www.cnblogs.com/wangtianxj/archive/2010/06/13/1757639.html http://blog.csdn.net/bupt07 ...

  7. Android动态加载字节码

    概述 面对App业务逻辑的频繁变更,如果每一次改变都对App进行一次升级,会降低App的用户体验,那么App进行模块化升级(这里与增量升级是不同的)是很好的解决方案,让用户在完全无感觉的情况下改变Ap ...

  8. Dalvik字节码的类型,方法与字段表示方法

    Dalvik字节码有着自己的类型,方法与字段表示方法,这些方法与Dalvik虚拟机指令集一起组成了一条条的Dalvik汇编代码. 1.类型 Dalvik字节码只有两种类型,基本类型与引用类型.Dalv ...

  9. 4. 移动安全渗透测试-(Android逆向基础)

    4.1 smali 基础 1.注释 smali中使用#来代表注释一行例如:# const-string v0, "aaa" #这句不会被执行 2.数据类型 V void,只能用于返 ...

随机推荐

  1. scrapy中css选择器初识

    由于最近做图片爬取项目,涉及到网页中图片信息的选择,所以边做边学了点皮毛,有自己的心得 百度图库是ajax加载的,所以解析json数据即可 hjsons = json.loads(response.b ...

  2. 新建体(1):新建type

    类似数组的类型: TYPE TAB_TYPE_MCHNO IS TABLE OF t_r_terminal.rt_merchno%type; tMchNo TAB_TYPE_MCHNO; )集合赋值: ...

  3. go官方的http.request + context样例

    go官方的http.request + context样例 https://github.com/DavadDi/go_study/blob/master/src/httpreq_context/ma ...

  4. 【MSSQL】SQL Server 设置用户只能查看并访问特定数据库

    #背景 SQL Server实例上有多个服务商的数据库,每个数据库要由各自的服务商进行维护, 为了限定不同服务商商的维护人员只能访问自己的数据库,且不能看到其他服务商的数据库,现需要给各个服务商商限定 ...

  5. java io系列23之 BufferedReader(字符缓冲输入流)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_23.html 更多内容请参考:java io系列01之 "目录" Buffere ...

  6. Oracle 去重并显示所有列数据

    一.原始数据(默认会生成一个 rownum 的序列,如下图的第一列) select t.* from ZD_DIC t where t.zdlx = '人员类型' 二.先分组,再给组内的内容进行排序 ...

  7. 设计模式---行为变化模式之命令模式(Command)

    前提:行为变化模式 在组件的构建过程中,组建行为的变化经常导致组件本身剧烈的变化.“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件的变化,实现两者之间的松耦合. 类中非虚函数和静态函数方法 ...

  8. canvas svg webgl threejs d3js 的区别

    canvas 绘制2D位图. Echarts是基于Canvas技术的可视化工具,底层封装了原生的JavaScript的绘图 API. canvas里面绘制的图形不能被引擎抓取,canvas中我们绘制图 ...

  9. VirtualBox下安装Ubuntu Server 16.04

    安装环境: Windows:确保磁盘空间足够,一般需要8个G左右. 所需文件: 首先在Ubuntu的官网上下载.iso的镜像文件,链接是:http://www.ubuntu.org.cn/server ...

  10. hibernate状态转换关系图【原】

    hibernate状态转换 其它参考 简单理解Hibernate三种状态的概念及互相转化 简单的Hibernate入门介绍