jar脱壳_软件脱壳 - Rannie` - 博客园

什么是 dex 文件

他是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。

由于dalvik是一种针对嵌入式设备而特殊设计的java虚拟机,所以dex文件与标准的class文件在结构设计上有着本质的区别

当java程序编译成class后,还需要使用dx工具将所有的class文件整合到一个dex文件,目的是其中各个类能够共享数据,在一定程度上降低了冗余,同时也是文件结构更加经凑,实验表明,dex文件是传统jar文件大小的50%左右

df09b31c928145eac689139e3fd2b4ff.png

可以看见:

dex将原来class每个文件都有的共有信息合成一体,这样减少了class的冗余

数据结构

类型

含义

u1

unit8_t,1字节无符号数

u2

unit16_t,2字节无符号数

u4

unit32_t,4字节无符号数

u8

unit64_t,8字节无符号数

sleb128

有符号LEB128,可变长度1~5

uleb128

无符号LEB128,

uleb128p1

无符号LEB128值加1,

dex文件结构

首先从宏观上来说 dex 的文件结构很简单,实际上是由多个不同结构的数据体以首尾相接的方式拼接而成。如下图:

数据名称

解释

header

dex文件头部,记录整个dex文件的相关属性

string_ids

字符串数据索引,记录了每个字符串在数据区的偏移量

type_ids

类似数据索引,记录了每个类型的字符串索引

proto_ids

原型数据索引,记录了方法声明的字符串,返回类型字符串,参数列表

field_ids

字段数据索引,记录了所属类,类型以及方法名

method_ids

类方法索引,记录方法所属类名,方法声明以及方法名等信息

class_defs

类定义数据索引,记录指定类各类信息,包括接口,超类,类数据偏移量

data

数据区,保存了各个类的真是数据

link_data

连接数据区

header

简单记录了dex文件的一些基本信息,以及大致的数据分布。长度固定为0x70,其中每一项信息所占用的内存空间也是固定的,好处是虚拟机在处理dex时不用考虑dex文件的多样性

字段名称

偏移值

长度

说明

magic

0x0

8

魔术字段,值为"de

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值