Android逆向基础----Dalvik字节码
参考此微博,更多详细内容可以到这里查看
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字节码的更多相关文章
- Android逆向基础----Android Dalvik虚拟机
Android Dalvik虚拟机的特点: l 体积小,占用内存空间小. l 专有DEX可执行文件. l 常量池采用32位索引值,寻址类方法名,字段名,常量更快. l 基于寄存器架构,并拥有一 ...
- APK反编译之一:基础知识—APK、Dalvik字节码和smali文件
refs: APK反编译之一:基础知识http://blog.csdn.net/lpohvbe/article/details/7981386 APK反编译之二:工具介绍http://blog.csd ...
- 安卓逆向学习---初始APK、Dalvik字节码以及Smali
参考链接:https://www.52pojie.cn/thread-395689-1-1.html res目录下资源文件在编译时会自动生成索引文件(R.java ), asset目录下的资源文件无需 ...
- 4. 如何解释dalvik字节码
如何解释dalvik字节码 文档: 在Android系统源码目录dalvik\docs有相关指令文档 dalvik-bytecode.html 实战: 来直接实战模拟来理解枯燥的理论 用IDA打开一个 ...
- 【腾讯内部干货分享】分析Dalvik字节码进行减包优化
http://wetest.qq.com/lab/view/?id=96?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.192184.TAS ...
- Android逆向基础----APK文件结构
参考这个博客 http://www.cnblogs.com/wangtianxj/archive/2010/06/13/1757639.html http://blog.csdn.net/bupt07 ...
- Android动态加载字节码
概述 面对App业务逻辑的频繁变更,如果每一次改变都对App进行一次升级,会降低App的用户体验,那么App进行模块化升级(这里与增量升级是不同的)是很好的解决方案,让用户在完全无感觉的情况下改变Ap ...
- Dalvik字节码的类型,方法与字段表示方法
Dalvik字节码有着自己的类型,方法与字段表示方法,这些方法与Dalvik虚拟机指令集一起组成了一条条的Dalvik汇编代码. 1.类型 Dalvik字节码只有两种类型,基本类型与引用类型.Dalv ...
- 4. 移动安全渗透测试-(Android逆向基础)
4.1 smali 基础 1.注释 smali中使用#来代表注释一行例如:# const-string v0, "aaa" #这句不会被执行 2.数据类型 V void,只能用于返 ...
随机推荐
- pytest 7 assert断言
前言:断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义了. 断言用到的是 assert关键字.之前的介绍,有的测试方法中其实用到了assert断言.简单的来说,就是预期的结果去和实际 ...
- 手机nv
NV值是记录手机的射频参数的,和手机的IMEI号.手机信号.WIFI信号等有关,如果NV值刷没了,手机没有这些校准的数据了,会对手机有一定的影响. qcn里面包含手机的imei 所有改变imei就改变 ...
- Unity 着色器
Unity中定义了很多种Shader类型,同样的Shader类型我们可以自定义,需要用到ShaderLab着色语言. 一个3D图形是怎样显示在我们的视觉? 3D数据文件-----3D显示程序----- ...
- scrapy关键字爬取百度图库(一)
刚入门学习python的菜鸟,如有错误,还望指教 爬取百度图库需要知道百度图库的加载方式是通过下拉加载的,所以我们需要分析Ajax请求来爬取每一页的数据信息 表述不清直接上图片 图片一是刷新页面后加载 ...
- IO 多路复用介绍
IO多路复用 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系 ...
- IO以及file的一些基本方法
IO定义:将内存的数据 持久化到设备上 这个动作称为输出 写 Output操作 把硬盘上的数据读取到内存 这个动作称为输入 读 Input 把上面这两种操作称为IO操作 File类的静态成员变量:pa ...
- 列举一些 MacBook Pro 必需的外设和应用程序推荐
来源:知乎 文章收录于:风云社区SCOEE,提供上千款mac软件下载 基于从事Apps设计或开发者,使用 MacBook Pro,以下罗列一些必需的外设和应用程序推荐. Retina 256GB SS ...
- mybtis 基础
一.什么是mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBati ...
- java io系列25之 PrintWriter (字符打印输出流)
更多内容请参考:java io系列01之 "目录" PrintWriter 介绍 PrintWriter 是字符类型的打印输出流,它继承于Writer.PrintStream 用于 ...
- python 面向对象(二)成员
##################################总结########################### 类的成员: 变量: 实例变量 对象.属性=xxx 类变量 ...