Dex文件及Dalvik字节码格式解析
来源:互联网 发布:怎么注册淘宝云客服 编辑:程序博客网 时间:2024/04/26 13:00
Dex文件介绍
Dex文件是Dalvik的可执行文件,Dalvik是针对嵌入式设备设计的java虚拟机,所以Dex文件和Class文件的结构上有很大区别。为了更好的利用嵌入式你设备的资源,Dalvik在java程序编译后,还需要用dx工具将编译产生的数个Class文件整合成一个Dex文件。这样其中的各个类就可以共享数据,减少冗余,使文件结构更加紧凑。
一个设备在执行Dex文件之前,需要优化该Dex文件并生成对应的Odex文件,然后该Odex文件被Dalvik执行。Odex文件本质是个Dex文件,只是针对目标平台做了相关优化,包括对内部字节码进行一系列处理,主要为字节码验证,替换优化及空方法消除。
Dex文件结构解析
字节码各部分数据详解
- header
header是Dex文件的文件头,简单的记录了Dex文件的一些基本信息,及大致数据分布。header的总长度是固定的0x70,其中每一信息项所占的内存空间也是相对固定的,这样做的好处,虚拟机在处理目标Dex文件初期,可以不考虑Dex文件的多样性,根据规定读取文件头,就可以获取Dex文件的大致信息。
Dex文件头部信息:
源码位于 /dalvik/libdex/DexFile.h:DexHeader
- string_ids
这一区域存储的是Dex文件字符串资源的索引信息,该索引信息是目标字符串在Dex文件数据区所在的真实物理偏移量。
源码位于/dalvik/libdex/DexFile.h:DexStringId
stringDataOff
记录了目标字符串在Dex文件中的实际偏移量,虚拟机想读取该字符串时,只需将Dex文件在内存中的起始地址加上stringDataOff
所指的偏移量,就是该字符串在内存中的实际物理地址。
在Dex文件中,每个每个字符串对应一个DexStringId
,大小4B。另外虚拟机通过DexHeader中的String_ids_size
获得当前Dex文件中的字符串的总数,通过乘法就可对该索引资源进行访问。
未完待续
0 0
- Dex文件及Dalvik字节码格式解析
- 深入理解Dalvik字节码指令及Smali文件
- 深入理解Dalvik字节码指令及Smali文件
- android dex文件Dalvik指令到smali代码的解析
- Dex文件头及解析机制分析
- 图解Dex文件结构及解析要点
- Android逆向笔记(3)--- dex文件Dalvik指令的解析
- dalvik字节码问答
- Dalvik字节码
- dex文件解析
- 常见文件字节码格式
- Android: .java文件转.dex和java字节码
- Dalvik字节码 Smali语法
- Dalvik 字节码的读取
- Java字节码与Dalvik字节码
- Java字节码和Dalvik字节码
- Dalvik指令分析(二) 从java文件到dex
- Dalvik指令分析(三) dex文件的结构
- bzoj2002(lct)
- 如何实现1080P延迟低于500ms的实时超清直播传输技术
- js获取get参数
- 4070: [Apio2015]雅加达的摩天楼
- 双重检查加锁,实现单例模式
- Dex文件及Dalvik字节码格式解析
- 如何找资源
- HashBIMap双向Map
- KMP算法详解
- BZOJ 3238: [Ahoi2013]差异【S(后)A(缀)M(树)上DP
- Qt中简单使用Firebase
- SpringCloud分布式开发五大神兽
- 堆的实现
- realm 知识点