AndroidDEX文件格式详解Word下载.docx
- 文档编号:20740769
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:25
- 大小:84.34KB
AndroidDEX文件格式详解Word下载.docx
《AndroidDEX文件格式详解Word下载.docx》由会员分享,可在线阅读,更多相关《AndroidDEX文件格式详解Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
000010000040000000000000004000200090000
000011000040000000000000001000000000000
0000120000d0000000000000227000000000000
00001300001000100010000021b000000040000
0000140107000010000000e0003000100020000
0000150022000000008000000620000011a000c
0000160206e00000010000e0001000000020000
00001700001000000063c066e697469003e4c15
0000180616a6176692f2f6f72506e6953747274
000019061653b6d12006a4c76612f61616c676e
00001a04f2f6a6263653b7412006a4c76612f61
00001b0616c676e532f72746e693b6712006a4c
00001c076612f61616c676e532f737965743b6d
00001d00600744c73653b74010000565602004c
00001e05b136a4c76612f61616c676e532f7274
00001f06e693b670400616d6e690300756f0074
000020070076972746e6e6c0500657474730021
0000210740973652e74616a617601000700000e
000022001030700780e0000020002008080b004
00002300102c80900020000000d000000000000
0000240000100000000000000010000000e0000
000025000700000000200000007000000a80000
0000260000300000003000000c4000000040000
00002700001000000e800000005000000040000
000028000f00000000600000001000001100000
000029020010000000200000130000010010000
00002a0000200000168000020020000000e0000
00002b0017600002003000000020000021b0000
00002c020000000000100000227000010000000
00002d00001000002380000
00002d8
1.map_list
map_list数据结构为:
Name
Format
Description
size
uint
sizeofthelist,inentries
list
map_item[size]
elementsofthelist
第一项为map_list的大小,其中map_item的结构为:
type
ushort
typeoftheitems;
seetablebelow
unused
(unused)
countofthenumberofitemstobefoundattheindicatedoffset
offset
offsetfromthestartofthefiletotheitemsinquestion
type的值如下表:
ItemType
Constant
Value
ItemSizeInBytes
header_item
TYPE_HEADER_ITEM
0x0000
0x70
string_id_item
TYPE_STRING_ID_ITEM
0x0001
0x04
type_id_item
TYPE_TYPE_ID_ITEM
0x0002
proto_id_item
TYPE_PROTO_ID_ITEM
0x0003
0x0c
field_id_item
TYPE_FIELD_ID_ITEM
0x0004
0x08
method_id_item
TYPE_METHOD_ID_ITEM
0x0005
class_def_item
TYPE_CLASS_DEF_ITEM
0x0006
0x20
map_list
TYPE_MAP_LIST
0x1000
4+(item.size*12)
type_list
TYPE_TYPE_LIST
0x1001
4+(item.size*2)
annotation_set_ref_list
TYPE_ANNOTATION_SET_REF_LIST
0x1002
4+(item.size*4)
annotation_set_item
TYPE_ANNOTATION_SET_ITEM
0x1003
class_data_item
TYPE_CLASS_DATA_ITEM
0x2000
implicit;
mustparse
code_item
TYPE_CODE_ITEM
0x2001
string_data_item
TYPE_STRING_DATA_ITEM
0x2002
debug_info_item
TYPE_DEBUG_INFO_ITEM
0x2003
annotation_item
TYPE_ANNOTATION_ITEM
0x2004
encoded_array_item
TYPE_ENCODED_ARRAY_ITEM
0x2005
annotations_directory_item
TYPE_ANNOTATIONS_DIRECTORY_ITEM
0x2006
这个map_list有13个map_item,分别是:
值
0x1
0x0
string_id_item
0xe
type_id_item
0x7
0xa8
proto_id_item
0x3
0xc4
field_id_item
0xe8
method_id_item
0x4
0xf0
class_def_item
0x110
0x2
0x130
0x168
0x176
0x21b
0x227
0x238
发现这个表中的size和offset和header_item中的值一致。
2.string_id_item
批注10得出stringid列表的位置为0x70,批注9得出stringid列表中string_id_item的数量为0xe。
stringid的结构为string_id_item:
string_data_off
offsetfromthestartofthefiletothestringdataforthisitem.Theoffsetshouldbetoalocationinthedatasection,andthedatashouldbeintheformatspecifiedby"
string_data_item"
below.Thereisnoalignmentrequirementfortheoffset.
string_data_off指向string的数据,string的数据的结构为string_data_item:
utf16_size
uleb128
sizeofthisstring,inUTF-16codeunits(whichisthe"
stringlength"
inmanysystems).Thatis,thisisthedecodedlengthofthestring.(Theencodedlengthisimpliedbythepositionofthe0byte.)字符串的字节个数。
data
ubyte[]
aseriesofMUTF-8codeunits(a.k.a.octets,a.k.a.bytes)followedbyabyteofvalue0.See"
MUTF-8(ModifiedUTF-8)Encoding"
abovefordetailsanddiscussionaboutthedataformat.
Note:
Itisacceptabletohaveastringwhichincludes(theencodedformof)UTF-16surrogatecodeunits(thatis,U+d800…U+dfff)eitherinisolationorout-of-orderwithrespecttotheusualencodingofUnicodeintoUTF-16.Itisuptohigher-levelusesofstringstorejectsuchinvalidencodings,ifappropriate.
字符串的实际数据。
LEB128
每个LEB128由1到5个字节组成,所有字节组合到一起代表一个32位值。
除了最后一个字节的最高标志位为0,其它的为1.剩下的7位为有效负荷,第二个字节的7位接上。
有符号LEB128的符号由最后字节的有效负荷最高位决定。
如下:
如果是有符号的LEB128,符号位取决于bit13。
如下举例:
EncodedSequence
Assleb128
Asuleb128
Asuleb128p1
-1
1
7f
127
126
807f
-128
16256
16255
uleb128p1的值加1为uleb128。
算法参见附录1。
从文件的0x70得出stringid列表如下,共有14个string_id_item。
01760000017e00000195000001a90000
01bd000001d1000001d9000001dc0000
01e0000001f5000001fb000002000000
0209000002100000
例如:
1)StringData在0x176处,可以从文件的0x176得到以下数据,以0结尾。
3c066e697469003e
先读取第一个字节为0x06,得出StringData的长度为6,所以StringData的ASCII码序列为:
3c696e69743e得到:
<
init>
2)StringData在0x17e处,可以从文件的0x17e得到以下数据,以0结尾。
4c15616a6176692f2f6f72506e695374727461653b6d1200
先读取第一个字节为0x15,得出StringData的长度为21,所以StringData的ASCII码序列为:
4c6a6176612f696f2f5072696e7453747265616d3b得到:
Ljava/io/PrintStream;
以此类推,可得其它StringData。
3)6a4c76612f61616c676e4f2f6a6263653b74得到:
Ljava/lang/Object;
4)6a4c76612f61616c676e532f72746e693b67得到:
Ljava/lang/String;
5)6a4c76612f61616c676e532f737965743b6d得到:
Ljava/lang/System;
6)744c73653b74得到:
Ltest;
7)56得到:
V
8)564c得到:
VL
9)5b6a4c76612f61616c676e532f72746e693b67得到:
[Ljava/lang/String;
10)616d6e69得到:
main
11)756f74得到:
out
12)706972746e6e6c得到:
println
13)6574747321得到:
14)7473652e74616a6176得到:
test.java
得出索引如下表:
3.type_id_item
批注12得出typeid列表的位置为0xa8,批注11得出typeid列表中type_id_item的数量为0x7。
typeid的结构为type_id_item:
descriptor_idx
indexintothestring_idslistforthedescriptorstringofthistype.ThestringmustconformtothesyntaxforTypeDescriptor,definedabove.
descriptor_idx为Stringid列表的索引。
索引为:
00010000000200000003000000040000000500000006000000080000
依次代表:
Ljava/lang/Object;
Ljava/lang/String;
Ljava/lang/System;
Ltest;
V[Ljava/lang/String;
Type_id_list列表如下:
2
3
4
5
6
4.proto_id_item
批注14得出prototypeid列表的位置为0xc4,批注13的处prototypeid列表中proto_id_item的数量为0x3。
prototypeid的结构为proto_id_item:
shorty_idx
indexintothestring_idslistfortheshort-formdescriptorstringofthisprototype.ThestringmustconformtothesyntaxforShortyDescriptor,definedabove,andmustcorrespondtothereturntypeandparametersofthisitem.
return_type_idx
indexintothetype_idslistforthereturntypeofthisprototype
parameters_off
offsetfromthestartofthefiletothelistofparametertypesforthisprototype,or0ifthisprototypehasnoparameters.Thisoffset,ifnon-zero,shouldbeinthedatasection,andthedatathereshouldbeintheformatspecifiedby"
type_list"
below.Additionally,thereshouldbenoreferencetothetypevoidinthelist.
shorty_idx为StringId列表的索引,return_type_idx为TypeId列表的索引,parameters_off指向type_list。
type_list结构如下:
type_item[size]
type_item结构入下:
type_idx
indexintothetype_idslist
type_idx为typeid列表的索引。
从文件的0xc4得到prototypeid列表如下,共有3个proto_id_item。
1)000600000005000000000000
string_id_list[0x6]代表V,返回类型type_id_list[0x5]代表V,没有参数。
2)000700000005000001680000
string_id_list[0x7]代表VL,返回类型type_id_list[0x5]代表V,参数从0x168处的值为:
000100000002一个参数,索引为0x2,type_id_list[0x2]代表Ljava/lang/String;
3)000700000005000001700000
string_id_list[0x7]代表VL,返回类型type_id_list[0x5]代表V,参数从0x170处的值为:
000100000006一个参数,索引为0x6,type_id_list[0x6]代表[Ljava/lang/String;
注:
字段和方法描述符参见附录2。
5.field_id_item
批注16得出fieldid列表的位置为0xe8,批注15的处fieldid列表中field_id_item的数量为0x1。
Fieldid的结构为field_id_item:
class_idx
indexintothetype_idslistforthedefinerofthisfield.T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AndroidDEX 文件格式 详解