深入理解Android:Java虚拟机ART
上QQ阅读APP看书,第一时间看更新

3.2.1 header_item

header_item是Dex文件头结构的类型(其实文件只是二进制数据的集合,这里只不过借用了编程语言的格式来描述它)。图3-4所示为header_item的数据结构伪代码。

图3-4 header_item数据结构伪代码

图3-4中head_item各个字段的解释如下。

·magic,取值必须是字符串“dex\n035\0”,或者byte数组{0x640x650x780x0a 0x300x330x350x00}。

·checksum,文件内容的校验和。不包括magic和checksum自己。该字段的内容用于检查文件是否损坏。

·signature,签名信息,不包括magic、checksum和signature。该字段的内容用于检查文件是否被篡改。

·file_size,整个文件的长度,单位为字节,包括所有内容。

·header_size,默认是0x70个字节。

·endian_tag,表示文件内容应该按什么字节序来处理。默认取值为0x12345678,Little Endian格式。如果为Big Endian时,该字段取值为0x78563412。

提示 以后我们会看到,Dex文件和第4章要介绍的Elf文件格式类似,都使用偏移这种方式来告诉解析者数据在文件的什么位置。其实,偏移量也是一种形式的索引。