android8.0的vdex文件格式分析
来源:互联网 发布:java files运用失败 编辑:程序博客网 时间:2024/05/19 20:19
google在android8.0新增加了vdex文件,定义如下
art\runtime\ vdex_file.h
// VDEX files contain extracted DEXfiles. The VdexFile class maps the file to
// memory and provides tools foraccessing its individual sections.
//
// File format:
// VdexFile::Header fixed-lengthheader
//
// DEX[0] array of theinput DEX files
// DEX[1] the bytecodemay have been quickened
// ...
// DEX[D]
//
Vdex的文件头定义
struct Header {
public:
Header(uint32_tnumber_of_dex_files_,
uint32_tdex_size,
uint32_tverifier_deps_size,
uint32_tquickening_info_size);
const char*GetMagic() const { return reinterpret_cast<const char*>(magic_); }
const char*GetVersion() const { return reinterpret_cast<const char*>(version_); }
boolIsMagicValid() const;
boolIsVersionValid() const;
bool IsValid()const { return IsMagicValid() && IsVersionValid(); }
uint32_tGetDexSize() const { return dex_size_; }
uint32_tGetVerifierDepsSize() const { return verifier_deps_size_; }
uint32_tGetQuickeningInfoSize() const { return quickening_info_size_; }
uint32_tGetNumberOfDexFiles() const { return number_of_dex_files_; }
static constexpr uint8_t kVdexInvalidMagic[]= { 'w', 'd', 'e', 'x' };
private:
staticconstexpr uint8_t kVdexMagic[] = { 'v', 'd', 'e', 'x' };
staticconstexpr uint8_t kVdexVersion[] = { '0', '0', '5', '\0' }; // access flags
uint8_t magic_[4];
uint8_tversion_[4];
uint32_tnumber_of_dex_files_;
uint32_tdex_size_;
uint32_tverifier_deps_size_;
uint32_tquickening_info_size_;
friend classVdexFile;
};
//VDEX的转换代码
art\dex2oat\dex2oat.cc
示例分析:
Vdex header部分
地址
字节数
描述
备注
示例含义
0x00
4
Magic Number
0x76,0x64,0x65,0x78,
(’v’,’d’,’e’,’x’,)
0x04
4
version
005
0x08
4
number_of_dex_files
Dex个数
01
0x0c
4
dex_size_
bc f0 06 00
符合后面dex header描述
0x10
4
verifier_deps_size_
00 00 17 98
0x14
4
quickening_info_size_
00 00 b2 f4
0x18
4
未知,是否是VdexFile的类地址?
bd e5 c4 1f
Dex部分:
地址
字节数
描述
备注
示例含义
0x1c
8
Magic Number
0x64,0x65,0x78,0x0a,
(’d’,’e’,’x’,’/’,’0’,’3’,’7’,0)
0x24
4
checksum
0x28
20
SHA-1 签名
0x3c
4
Dex文件长度
bc f0 06 00
加上0x1c的偏移,该dex在00 06 f0 d7结束
0x40
4
dex文件头大小
035到037版本都是70
Dex文件头在0x8b处结束
0x44
4
Endian
78 56 34 12
表示小头字节序
0x48
4
Link size
0
0表示无动态链接
0x4c
4
Link off
0
0x50
4
Map off
00 06 ef e0
Dex结束处 00 06 f0 d7
MAP数据
在dex ids数据结束后,后面的是data数据和link数据,详细分析见dex文件格式分析。
- android8.0的vdex文件格式分析
- 公司项目Android8.0适配分析
- Android8.0
- android8.0编译记录
- Android8.0 Setupwizard 定制
- Android8.0广播使用
- Android8.0 安装apk
- Android8.0 AlarmManagerService
- Android8
- Android8.0中CTS测试对于TEE的要求
- Android8.0中对指纹的新要求
- Android8.0曝光--新功能简化
- Android8.0“未知来源”安装
- Android8.0 Oreo新特性
- Android8.0 ZenMode 静音模式
- Android8.0 修改默认音量
- GPSR的trace文件格式分析
- java的class文件格式分析
- 微信小程序处理用户拒绝授权情况及微信登录,登录保存等系列解决方案
- MVVM
- linux 环境下处理文件名空格的情况
- debian服务器解决中文安装后出现乱码的问题
- iOS开发之Realm数据库第一篇
- android8.0的vdex文件格式分析
- 1-GCC常用选项
- SIM卡将逐渐消失,eSIM卡的风口已来?
- usaco 3.1 Contact
- gitlab 9.3.6部署
- 页面滚动的时候自动切换导航栏
- Maven学习笔记 --- Maven入门笔记四
- java特殊注释
- SSM中文件上传与下载