专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
鸿洋  ·  Android×鸿蒙×AI ... ·  8 小时前  
复利大王  ·  上岸第一剑的瓜 ·  9 小时前  
复利大王  ·  江浙沪美女留子回国下嫁怀孕后悔 ·  昨天  
复利大王  ·  某航离谱瓜! ·  昨天  
复利大王  ·  老同学中捞一捞能不能找到免费P友 ·  2 天前  
51好读  ›  专栏  ›  郭霖

一篇文章带你搞懂DEX文件的结构

郭霖  · 公众号  · android  · 2017-03-23 08:00

正文

请到「今天看啥」查看全文


output = HelloWorld . dex HelloWorld . class

就会出现 HelloWorld.dex 文件了。这时,我们需要下载一个十六进位文本编辑器,因为用它可以解析二进制文件,我们用它打开dex文件就会全部以十六进制的数进行展现了。这里推荐010Editor(收费软件,可以免费试用30天):

http://www.sweetscape.com/download/010editor

下载完成之后,我们可以用它打开dex文件了,打开之后,你的界面应该是这样的:

一下子看到这些东西,是不是立马懵逼了,正常,我刚开始看的时候也是,这什么玩意儿啊!其实,这就是二进制流文件中的内容,010Editor 把它转化成了16进制的内容,以方便我们阅读的。

DEX文件结构总览

不要慌,下面我跟你解释,这些东西我们虽然看了懵逼,但是 Dalvik虚拟机 不会,因为它就是解析这些东西的,这些东西虽然看起来头大,但是它是有自己的格式标准的。dex文件的结构如下图所示:

这就是dex的文件格式了,下面我们从最上面的 Header 说起,Header 中存储了什么内容呢?下面我们还得来一张图:

DEX文件结构解析

先看下就行,不用着急,下面我们一步一步来,首先点击你的010Editor的这里:

对,就是箭头指的那里,点击之后,你会发现上面的有一片区域成了选中的颜色,这部分里面存储的就是 Header 中的数据了,下面我们根据 Header 的数据图以此来进行分析。

首先,我们看到 DexHeader 中每个数据前面有个 u1 或者 u4 ,这个是什么意思呢?它们其实就是代表 1个 或者 4个 字节的无符号数。下面我们依次根据 Header 中的数据段进行解释。

1. 从第一个看起, magic[8] ;它代表dex中的文件标识,一般被称为 魔数 。是用来识别dex这种文件的,它可以判断当前的dex文件是否有效,可以看到它用了8个1字节的无符号数来表示,我们在010Editor中可以看到也就是“ 64 65 78 0A 30 33 35 00 ”这8个字节,这些字节都是用16进制表示的,用16进制表示的话,两个数代表一个字节(一个字节等于8位,一个16进制的数能表示4位)。这8个字节用ASCII码表转化一下可以转化为: dex . 035 (其中,' . ' 不是转化来的)。目前,dex的魔数固定为 dex.035

2. 第二个是, checksum ;  它是dex文件的校验和,通过它可以判断dex文件是否被损坏或者被篡改。它占用4个字节,也就是“ 5D 9D F9 59 ”。这里提醒一下,在010Editor中,其实可以分别识别我们在DexHeader中看到的这些字段的,你可以点一下这里:

你可以看到这个 header列表 展开了,其实我们分析下来就和它这个结构是一样的,你可以先看下,我们现在分析到了 checksum 中了,你可以看到后面对应的值是“59 F9 9D 5D”。咦?这好像和上面的字节不是一一对应的啊。对的,你可以发现它是反着写的。这是由于dex文件中采用的是小字节序的编码方式,也就是低位上存储的就是低字节内容,所以它们应该要反一下。

3. 第三个到了 signature[kSHA1DigestLen] 了,signature 字段用于检验dex文件,其实就是把整个dex文件用SHA-1签名得到的一个值。这里占用20个字节,你可以自己点010Editor看一看。

4. 第四个 fileSize ;表示整个文件的大小,占用4个字节。

5. 第五个 headerSize ;表示 DexHeader 头结构的大小,占用4个字节。这里可以看到它一共占用了112个字节,112对应的16进制数为70h,你可以选中头文件看看010Editor是不是真的占用了这么多:

6. 第6个是 endianTag ;代表 字节序标记,用于指定dex运行环境的cpu,预设值为0x12345678,对应在101Editor中为“78 56 34 12”(小字节序)。

7.







请到「今天看啥」查看全文


推荐文章
复利大王  ·  上岸第一剑的瓜
9 小时前
复利大王  ·  某航离谱瓜!
昨天
复利大王  ·  老同学中捞一捞能不能找到免费P友
2 天前
人人都是产品经理  ·  产品人、运营人,月薪如何多涨2000+?
7 年前
Clinic門诊新视野  ·  赵金河:替罗非班用于PPCI干预LAC-D1的治疗
7 年前
半导体行业观察  ·  英伟达股价1年半狂飙570%,科技业泡沫?
7 年前