annotate paraspace/dexfile.py @ 132:75a31967ebee

Following the ref in resotre_dependencies()
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 09 Aug 2011 15:30:45 +0800
parents 044bfc415577
children f31bfe55d9c2
rev   line source
79
9c7bfb13b262 Add Doxyfile
Thinker K.F. Li <thinker@codemud.net>
parents: 75
diff changeset
1 ## \file
9c7bfb13b262 Add Doxyfile
Thinker K.F. Li <thinker@codemud.net>
parents: 75
diff changeset
2 # Define, and parse, struct/format of DEX files.
9c7bfb13b262 Add Doxyfile
Thinker K.F. Li <thinker@codemud.net>
parents: 75
diff changeset
3 #
9c7bfb13b262 Add Doxyfile
Thinker K.F. Li <thinker@codemud.net>
parents: 75
diff changeset
4
12
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
5 ## \brief Manage offset
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
6 #
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
7 # The instances are initialized with a offset. Every time an instance
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
8 # is called, it return the offset before advancing offset with specify
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
9 # size.
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
10 #
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
11 # moff = man_off(init_off)
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
12 # assert moff(5) == init_off
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
13 # assert moff() == (init_off + 5)
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
14 # assert moff() == (init_off + 5)
8101024c942b Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents: 11
diff changeset
15 #
3
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
16 class man_off(object):
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
17 off = None
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
18
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
19 def __init__(self, off):
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
20 self.off = off
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
21 pass
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
22
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
23 def __call__(self, sz=0):
3
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
24 off = self.off
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
25 self.off = off + sz
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
26 return off
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
27 pass
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
28
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
29
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
30 def _to_uint(data):
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
31 v = 0
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
32 sh = 0
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
33 for c in data:
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
34 v = v + (ord(c) << sh)
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
35 sh = sh + 8
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
36 pass
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
37 return v
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
38
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
39
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
40 def _to_int(data):
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
41 v = _to_uint(data)
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
42 sz = len(data)
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
43 if sz and ((1 << (sz * 8 - 1)) & v):
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
44 v = -((1 << (sz * 8)) - v)
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
45 pass
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
46 return v
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
47
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
48
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
49 def _uleb128(data):
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
50 sh = 0
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
51 v = 0
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
52 for c in data:
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
53 cv = ord(c)
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
54 v = v + ((cv & 0x7f) << sh)
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
55 sh = sh + 7
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
56
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
57 if cv <= 0x7f:
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
58 break
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
59 pass
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
60
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
61 nbytes = sh / 7
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
62 return v, nbytes
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
63
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
64
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
65 def _to_uleb128(v):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
66 assert v >= 0
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
67
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
68 data = ''
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
69 while True:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
70 if v > 0x7f:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
71 data = data + chr((v & 0x7f) | 0x80)
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
72 else:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
73 data = data + chr(v & 0x7f)
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
74 break
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
75 v = v >> 7
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
76 pass
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
77
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
78 return data
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
79
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
80
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
81 def _uleb128_sz(v):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
82 return len(_to_uleb128(v))
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
83
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
84
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
85 def _leb128(data):
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
86 v, sh = _uleb128(data)
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
87 if v & (1 << (sh * 7 - 1)):
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
88 v = -((1 << (sh * 7)) - v)
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
89 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
90 return v, sh
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
91
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
92
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
93 def _to_leb128(v):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
94 data = ''
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
95 while True:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
96 if v > 0x3f or v < ~0x3f:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
97 data = data + chr((v & 0x7f) | 0x80)
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
98 else:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
99 data = data + chr(v & 0x7f)
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
100 break
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
101 v = v >> 7
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
102 pass
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
103 return data
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
104
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
105
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
106 def _leb128_sz(v):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
107 return len(_to_leb128(v))
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
108
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
109
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
110 def _compute_sz(o, _type):
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
111 if hasattr(o, 'compute_size'):
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
112 _type.compute_size(o)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
113 pass
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
114 return _type.sizeof(o)
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
115
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
116
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
117 class _dex_type(object):
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
118 pass
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
119
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
120
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
121 class _rawstr(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
122 size = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
123 factor = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
124 data = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
125 data_size = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
126
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
127 ##
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
128 # \param size_name is dot separated attribute names from the parent.
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
129 #
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
130 def __init__(self, size=None, size_name=None, factor=1):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
131 self.size = size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
132 self.size_name = size_name
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
133 self.factor = factor
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
134 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
135
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
136 def parse(self, parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
137 obj = _rawstr(self.size, self.size_name, self.factor)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
138 if self.size is not None:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
139 size = self.size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
140 else:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
141 size = parent
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
142 for name in self.size_name.split('.'):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
143 size = getattr(size, name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
144 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
145 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
146 obj.data_size = size * self.factor
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
147
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
148 obj.data = data[off:off + obj.data_size]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
149 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
150
125
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
151 def compute_size(self, v):
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
152 v.data_size = len(v.data)
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
153 pass
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
154
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
155 def sizeof(self, v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
156 return v.data_size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
157
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
158 def to_str(self, v):
63
21d9b6773242 Fix _rawstr.to_str() in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 58
diff changeset
159 return v.data
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
160 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
161
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
162 class rawstr(_rawstr):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
163 def __init__(self, size, factor=1):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
164 super(rawstr, self).__init__(size=size, factor=factor)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
165 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
166 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
167
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
168
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
169 class rawstr_size_name(_rawstr):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
170 def __init__(self, size_name, factor=1):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
171 super(rawstr_size_name, self).__init__(size_name=size_name,
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
172 factor=factor)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
173 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
174 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
175
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
176
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
177 class tap(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
178 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
179 def parse(parent, data, off):
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
180 return tap()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
181
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
182 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
183 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
184 return 0
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
185
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
186 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
187 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
188 return ''
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
189 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
190
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
191
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
192 class uint32(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
193 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
194 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
195 v = _to_uint(data[off:off + 4])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
196 return v
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
197
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
198 @staticmethod
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
199 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
200 pass
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
201
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
202 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
203 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
204 return 4
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
205
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
206 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
207 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
208 return chr(v & 0xff) + chr((v >> 8) & 0xff) + chr((v >> 16) & 0xff) + \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
209 chr((v >> 24) & 0xff)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
210 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
211
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
212
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
213 class uint16(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
214 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
215 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
216 v = _to_uint(data[off:off + 2])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
217 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
218
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
219 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
220 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
221 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
222
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
223 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
224 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
225 return 2
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
226
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
227 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
228 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
229 return chr(v & 0xff) + chr((v >> 8) & 0xff)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
230 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
231
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
232
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
233 class uint8(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
234 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
235 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
236 v = _to_uint(data[off:off + 1])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
237 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
238
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
239 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
240 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
241 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
242
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
243 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
244 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
245 return 1
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
246
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
247 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
248 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
249 return chr(v & 0xff)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
250 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
251
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
252
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
253 class int32(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
254 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
255 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
256 v = _to_int(data[off:off + 4])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
257 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
258
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
259 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
260 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
261 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
262
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
263 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
264 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
265 return 4
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
266
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
267 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
268 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
269 return chr(v & 0xff) + chr((v >> 8) & 0xff) + chr((v >> 16) & 0xff) + \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
270 chr((v >> 24) & 0xff)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
271 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
272
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
273
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
274 class int16(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
275 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
276 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
277 v = _to_int(data[off:off + 2])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
278 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
279
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
280 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
281 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
282 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
283
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
284 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
285 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
286 return 2
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
287
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
288 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
289 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
290 return chr(v & 0xff) + chr((v >> 8) & 0xff)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
291 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
292
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
293
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
294 class uleb128(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
295 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
296 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
297 v, sh = _uleb128(data[off:off + 5])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
298 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
299
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
300 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
301 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
302 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
303
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
304 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
305 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
306 return _uleb128_sz(v)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
307
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
308 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
309 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
310 return _to_uleb128(v)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
311 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
312
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
313
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
314 class leb128(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
315 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
316 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
317 v, sh = _leb128(data[off:off + 5])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
318 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
319
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
320 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
321 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
322 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
323
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
324 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
325 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
326 return _leb128_sz(v)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
327
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
328 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
329 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
330 return _to_leb128(v)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
331 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
332
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
333
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
334 class auto_align(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
335 bits = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
336
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
337 def __init__(self, bits):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
338 self.bits = bits
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
339 pass
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
340
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
341 def recompute_align(self, off):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
342 mask = (1 << self.bits) - 1
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
343 padding_sz = ((off + mask) & ~mask) - off
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
344 return padding_sz
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
345
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
346 def parse(self, parent, data, off):
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
347 return self.recompute_align(off)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
348
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
349 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
350 def compute_size(v):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
351 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
352
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
353 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
354 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
355 return v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
356
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
357 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
358 def to_str(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
359 return '\x00' * v
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
360 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
361
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
362
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
363 def _get_sz(o):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
364 if isinstance(o, relocatable):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
365 return o.data_size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
366 return o.__class__.sizeof(o)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
367
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
368
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
369 ## \biref Associate objects from two set of objects.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
370 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
371 class _objs_asso(_dex_type):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
372 left = None
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
373 left_ref = None
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
374 right = None
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
375 right_ref = None
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
376
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
377 ## \brief Update references for a element pair from left and right.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
378 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
379 # This method must be called by derivation to associate a pair of
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
380 # elements.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
381 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
382 def _update_refs(self, left_elt, right_elt):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
383 lref = getattr(left_elt, self.left_ref)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
384 if not isinstance(right_elt, lref.target_path):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
385 raise TypeError, 'invalid target_path in left %s' % (repr(le))
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
386
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
387 rref = getattr(right_elt, self.right_ref)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
388 if not isinstance(left_elt, rref.target_path):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
389 raise TypeError, 'invalid target_path in right %s' % (repr(re))
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
390
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
391 new_lref = ref(lref.target_path)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
392 new_lref.target = right_elt
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
393 setattr(left_elt, self.left_ref, new_lref)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
394
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
395 new_rref = ref(rref.target_path)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
396 new_rref.target = left_elt
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
397 setattr(right_elt, self.right_ref, new_rref)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
398 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
399
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
400 ## \brief Assocate elements from left list to a respective right element.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
401 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
402 # This method must be called before linking dependencies.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
403 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
404 def build_associations(self, left, right):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
405 raise NotImplementedError, 'build_associations is not implemented'
55
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
406
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
407 def parse(self, parent, data, off):
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
408 return self
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
409
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
410 def sizeof(self, obj):
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
411 return 0
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
412
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
413 def to_str(self):
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
414 return ''
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
415
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
416 @staticmethod
55
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
417 def compute_size(self):
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
418 pass
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
419
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
420 def children(self):
6e4cf6905729 Seeking parents in reversed order for _build_associations()
Thinker K.F. Li <thinker@codemud.net>
parents: 54
diff changeset
421 return []
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
422 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
423
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
424
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
425 ## \brief One to one association.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
426 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
427 # Associate nth element from left sequence to nth element in right
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
428 # sequence.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
429 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
430 class one2one(_objs_asso):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
431 def __init__(self, left, left_ref, right, right_ref):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
432 self.left = left
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
433 self.left_ref = left_ref
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
434 self.right = right
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
435 self.right_ref = right_ref
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
436 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
437
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
438 ## \brief Associate elements from left list to elements from right list
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
439 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
440 def build_associations(self, left, right):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
441 assert len(left) == len(right)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
442 for le, re in map(None, left, right):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
443 self._update_refs(le, re)
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
444 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
445 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
446 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
447
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
448
48
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
449 class relocatable(_dex_type):
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
450 data_size = None
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
451
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
452 @staticmethod
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
453 def parse(parent, data, off):
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
454 pass
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
455
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
456 @staticmethod
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
457 def sizeof(v):
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
458 return v.data_size
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
459
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
460 def to_str(self):
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
461 pass
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
462
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
463 def compute_size(self):
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
464 pass
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
465
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
466 def children(self):
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
467 raise NotImplementedError, \
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
468 '%s: does not implement children' % (self.__class__.__name__)
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
469 pass
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
470
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
471
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
472 class null_relocatable(relocatable):
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
473 back_type = None
48
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
474 pass
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
475
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
476
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
477 ## \brief Implicit reference to a target.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
478 #
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
479 # It is a placeholder for storing relationship defined by an association.
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
480 #
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
481 class ref(_dex_type):
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
482 target_path = None
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
483
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
484 def __init__(self, target_path=None):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
485 self.target_path = target_path
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
486 pass
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
487
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
488 @staticmethod
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
489 def parse(parent, data, off):
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
490 pass
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
491
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
492 @staticmethod
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
493 def sizeof(v):
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
494 return 0
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
495
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
496 @staticmethod
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
497 def compute_size(self):
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
498 pass
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
499
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
500 @staticmethod
119
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
501 def to_str(child):
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
502 return ''
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
503
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
504 def get_value(self, parents):
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
505 pass
51
00d106f6c427 Define children() for ref
Thinker K.F. Li <thinker@codemud.net>
parents: 50
diff changeset
506
00d106f6c427 Define children() for ref
Thinker K.F. Li <thinker@codemud.net>
parents: 50
diff changeset
507 def children(self):
00d106f6c427 Define children() for ref
Thinker K.F. Li <thinker@codemud.net>
parents: 50
diff changeset
508 return []
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
509 pass
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
510
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
511
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
512 ## \brief Reference to a value from a given path.
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
513 #
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
514 class value_ref(ref):
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
515 def get_value(self, parents):
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
516 from paraspace.dex_deptracker import _resolve_name_path
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
517 from paraspace.dex_deptracker import _dex_tree_get_child
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
518
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
519 pparts = self.target_path.split('.')
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
520 clazz_name = pparts[0]
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
521 clazz, dummy = _resolve_name_path(clazz_name)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
522
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
523 rev_parents = list(parents)
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
524 rev_parents.reverse()
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
525
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
526 for parent in rev_parents:
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
527 if isinstance(parent, clazz):
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
528 break
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
529 pass
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
530 else:
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
531 raise ValueError, 'can not find %s' % (self.target_path)
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
532
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
533 attr_path = '.'.join(pparts[1:])
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
534 value = _dex_tree_get_child(parent, attr_path)
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
535 return value
132
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
536
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
537 def set_value(self, value, parents):
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
538 from paraspace.dex_deptracker import _resolve_name_path
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
539 from paraspace.dex_deptracker import _dex_tree_get_child
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
540
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
541 pparts = self.target_path.split('.')
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
542 clazz_name = pparts[0]
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
543 clazz, dummy = _resolve_name_path(clazz_name)
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
544
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
545 rev_parents = list(parents)
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
546 rev_parents.reverse()
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
547
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
548 for parent in rev_parents:
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
549 if isinstance(parent, clazz):
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
550 break
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
551 pass
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
552 else:
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
553 raise ValueError, 'can not find %s' % (self.target_path)
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
554
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
555 attr_path = '.'.join(pparts[1:])
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
556 _dex_tree_set_child(parent, attr_path, value)
75a31967ebee Following the ref in resotre_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
557 pass
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
558 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
559
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
560
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
561 class array(relocatable):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
562 count_name = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
563 child_type = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
564 items = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
565
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
566 def __init__(self, count_name, child_type):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
567 super(array, self).__init__()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
568 self.count_name = count_name
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
569 self.child_type = child_type
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
570 pass
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
571
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
572 def parse(self, parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
573 nitem = parent
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
574 for name in self.count_name.split('.'):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
575 nitem = getattr(nitem, name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
576 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
577 obj = self.parse_nitem(parent, data, off, nitem)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
578 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
579
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
580 def parse_nitem(self, parent, data, off, nitem):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
581 moff = man_off(off)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
582
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
583 obj = self.__class__(self.count_name, self.child_type)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
584
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
585 def parse():
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
586 item = obj.child_type.parse(parent, data, moff())
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
587 item_sz = obj.child_type.sizeof(item)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
588 moff(item_sz)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
589 return item
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
590
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
591 items = [parse() for i in range(nitem)]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
592
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
593 obj.items = items
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
594 obj.data_size = moff() - off
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
595 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
596
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
597 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
598 def compute_size(self):
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
599 sizes = [_compute_sz(item, self.child_type)
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
600 for item in self.items]
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
601 size = sum(sizes)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
602 self.data_size = size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
603 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
604
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
605 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
606 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
607 to_str = self.child_type.to_str
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
608 strs = [to_str(item) for item in self.items]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
609 return ''.join(strs)
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
610
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
611 def children(self):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
612 return ('items',)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
613 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
614
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
615
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
616 class array_sorted(array):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
617 pass
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
618
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
619
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
620 class composite(relocatable):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
621 child_names = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
622
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
623 def __init__(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
624 for child_name in self.child_names:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
625 setattr(self, child_name, None)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
626 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
627 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
628
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
629 def parse_child(self, child_name, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
630 child_clazz = getattr(self.__class__, child_name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
631 child = child_clazz.parse(self, data, off)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
632 setattr(self, child_name, child)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
633 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
634
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
635 @classmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
636 def parse(clazz, parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
637 moff = man_off(off)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
638 obj = clazz()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
639
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
640 for child_name in clazz.child_names:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
641 obj.parse_child(child_name, data, moff())
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
642 child = getattr(obj, child_name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
643 child_clazz = getattr(obj.__class__, child_name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
644 child_sz = child_clazz.sizeof(child)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
645 moff(child_sz)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
646 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
647
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
648 obj.data_size = moff() - off
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
649 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
650
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
651 def compute_size(self):
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
652 children = [(getattr(self, child_name),
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
653 getattr(self.__class__, child_name))
64
d644c13b8cb2 composite run to_str() with children return by children()
Thinker K.F. Li <thinker@codemud.net>
parents: 63
diff changeset
654 for child_name in self.children()]
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
655 child_sizes = [_compute_sz(child, child_type)
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
656 for child, child_type in children]
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
657 self.data_size = sum(child_sizes)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
658 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
659
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
660 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
661 child_clazzs = [getattr(self.__class__, child_name)
64
d644c13b8cb2 composite run to_str() with children return by children()
Thinker K.F. Li <thinker@codemud.net>
parents: 63
diff changeset
662 for child_name in self.children()]
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
663 children = [getattr(self, child_name)
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
664 for child_name in self.children()]
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
665 child_strs = map(lambda child_clazz, child: \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
666 child_clazz.to_str(child),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
667 child_clazzs, children)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
668 return ''.join(child_strs)
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
669
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
670 def children(self):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
671 return self.child_names
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
672 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
673
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
674
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
675 class cond(relocatable):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
676 condition = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
677 child_type = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
678 value = None
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
679 is_true = None
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
680
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
681 def __init__(self, cond, child_type):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
682 self.condition = cond
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
683 self.child_type = child_type
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
684 pass
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
685
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
686 def parse(self, parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
687 if self.condition(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
688 value = self.child_type.parse(parent, data, off)
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
689 is_true = True
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
690 else:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
691 value = None
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
692 is_true = False
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
693 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
694
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
695 obj = cond(self.condition, self.child_type)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
696 obj.value = value
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
697 obj.data_size = self.sizeof(obj)
43
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
698 obj.is_true = is_true
5cea19126a11 Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents: 41
diff changeset
699
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
700 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
701
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
702 def sizeof(self, v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
703 if v.value is None:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
704 return 0
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
705 return self.child_type.sizeof(v.value)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
706
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
707 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
708 def compute_size(self):
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
709 if self.is_true:
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
710 self.data_size = _compute_sz(self.value, self.child_type)
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
711 else:
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
712 self.data_size = 0
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
713 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
714 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
715
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
716 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
717 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
718 if self.value is None:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
719 return ''
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
720
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
721 data = self.child_type.to_str(self.value)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
722 return data
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
723
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
724 def children(self):
53
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
725 if self.is_true:
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
726 return ('value',)
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
727 return ()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
728 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
729
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
730
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
731 class switch(relocatable):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
732 selector = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
733 map = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
734 child_type = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
735 value = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
736
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
737 _parent = None
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
738
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
739 def __init__(self, selector, map):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
740 self.selector = selector
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
741 self.map = map
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
742 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
743
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
744 def switch_key(self, parent):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
745 selector = self.selector
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
746 sel_value = parent
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
747 for name in selector.split('.'):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
748 sel_value = getattr(sel_value, name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
749 pass
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
750 return sel_value
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
751
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
752 def _get_child_type(self, parent):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
753 sel_value = self.switch_key(parent)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
754
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
755 child_type = self.map[sel_value]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
756 return child_type
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
757
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
758 def parse(self, parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
759 child_type = self._get_child_type(parent)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
760 value = child_type.parse(parent, data, off)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
761
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
762 obj = switch(self.selector, self.map)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
763 obj.value = value
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
764 obj.child_type = child_type
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
765 obj.data_size = self.sizeof(obj)
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
766 obj._parent = parent
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
767 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
768
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
769 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
770 def sizeof(v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
771 return v.child_type.sizeof(v.value)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
772
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
773 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
774 def compute_size(self):
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
775 self.data_size = _compute_sz(self.value, self.child_type)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
776 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
777
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
778 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
779 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
780 data = self.child_type.to_str(self.value)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
781 return data
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
782
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
783 def children(self):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
784 key = self.switch_key(self._parent)
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
785 return (repr(key),)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
786 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
787
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
788
53
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
789 class abs_value(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
790 value = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
791
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
792 def __init__(self, value):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
793 self.value = value
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
794 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
795
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
796 def parse(self, parse, data, off):
53
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
797 return self.value
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
798
125
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
799 @staticmethod
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
800 def compute_size(v):
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
801 pass
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
802
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
803 def sizeof(self, v):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
804 return 0
125
b9688a3badaa Add compute_size() for DEX types that missed it
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
805
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
806 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
807 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
808 return ''
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
809
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
810 def children(self):
53
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
811 return ()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
812 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
813
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
814
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
815 ## \brief Make a dependency to a depend-on for back type.
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
816 #
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
817 # Depend-on is the object that the back type is supposed to point to.
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
818 # Back type of a depend must be not a composite type while depend-on
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
819 # must be.
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
820 #
48
3936d223989a Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents: 45
diff changeset
821 class depend(null_relocatable):
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
822 depend_on = None
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
823
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
824 def __init__(self, depend_on):
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
825 self.depend_on = depend_on
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
826 pass
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
827
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
828 def __call__(self, back_type):
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
829 assert type(back_type) != type or not issubclass(back_type, composite)
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
830 self.back_type = back_type
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
831 return self
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
832
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
833 def parse(self, parent, data, off):
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
834 v = self.back_type.parse(parent, data, off)
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
835 return v
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
836
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
837 def sizeof(self, v):
58
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
838 from paraspace.dex_deptracker import _resolve_name_path
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
839 from paraspace.dex_deptracker import _skip_marker_clazz
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
840
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
841 depon_clazz, dummy = _resolve_name_path(self.depend_on)
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
842 depon_clazz = _skip_marker_clazz(depon_clazz)
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
843 if type(depon_clazz) == type and \
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
844 isinstance(v, depon_clazz):
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
845 v = v.data_offset
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
846 elif type(depon_clazz) != type and \
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
847 isinstance(v, depon_clazz.__class__):
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
848 v = v.data_offset
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
849 pass
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
850 v = self.back_type.sizeof(v)
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
851 return v
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
852
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
853 def compute_size(self, child):
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
854 _compute_sz(child, self.back_type)
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
855 pass
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
856
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
857 def to_str(self, child):
49
38fdd422f611 depend.child_type is replaced by null_relocatable.back_type
Thinker K.F. Li <thinker@codemud.net>
parents: 48
diff changeset
858 return self.back_type.to_str(child)
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
859 pass
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
860
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
861
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
862 def _set_name_path_name(parent, name, obj):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
863 if isinstance(parent, (list, dict)):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
864 key = eval(name)
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
865 parent[key] = obj
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
866 return
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
867 setattr(parent, name, obj)
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
868 pass
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
869
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
870
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
871 class depend_off(depend):
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
872 def compute_size(self, child):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
873 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
874
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
875 def sizeof(self, child):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
876 if isinstance(child, composite):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
877 return self.back_type.sizeof(child.data_offset)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
878 return self.back_type.sizeof(child)
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
879 pass
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
880
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
881
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
882 class depend_off_rel(depend):
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
883 relative_to = None
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
884 _depon2_log = {}
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
885
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
886 def __init__(self, relative_to, depend_on):
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
887 super(depend_off_rel, self).__init__(depend_on)
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
888 self.relative_to = relative_to
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
889 pass
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
890
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
891 def parse(self, parent, data, off):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
892 v = super(depend_off_rel, self).parse(parent, data, off)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
893 return v
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
894
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
895 def compute_size(self, child):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
896 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
897
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
898 def sizeof(self, child):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
899 if isinstance(child, composite):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
900 pivot = self._depon2_log[child] # depon2
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
901 off_diff = child.data_offset - pivot.data_offset
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
902 return self.back_type.sizeof(off_diff)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
903 return self.back_type.sizeof(child)
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
904 pass
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
905
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
906
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
907 class depend_idx(depend):
58
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
908 def sizeof(self, v):
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
909 from paraspace.dex_deptracker import _resolve_name_path
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
910 from paraspace.dex_deptracker import _skip_marker_clazz
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
911
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
912 depon_clazz, dummy = _resolve_name_path(self.depend_on)
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
913 depon_clazz = _skip_marker_clazz(depon_clazz)
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
914 do_child_clazz = depon_clazz.child_type # depon_clazz must be an array
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
915
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
916 if type(do_child_clazz) == type and \
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
917 isinstance(v, do_child_clazz):
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
918 v = v.data_idx
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
919 elif type(do_child_clazz) != type and \
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
920 isinstance(v, do_child_clazz.__class__):
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
921 v = v.data_idx
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
922 pass
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
923 v = self.back_type.sizeof(v)
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
924 return v
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
925
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
926 def compute_size(self, child):
58
c2a4921ec83b Fix issue misbehavior for dependency when update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 57
diff changeset
927 pass
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
928
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
929 def sizeof(self, child):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
930 if isinstance(child, composite):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
931 return self.back_type.sizeof(child.data_idx)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
932 return self.back_type.sizeof(child)
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
933 pass
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
934
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
935
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
936 class _DEX_header(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
937 magic = rawstr(8)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
938 checksum = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
939 signature = rawstr(20)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
940 fileSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
941 headerSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
942 endianTag = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
943 linkSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
944 linkOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
945 mapOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
946 stringIdsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
947 stringIdsOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
948 typeIdsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
949 typeIdsOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
950 protoIdsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
951 protoIdsOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
952 fieldIdsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
953 fieldIdsOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
954 methodIdsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
955 methodIdsOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
956 classDefsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
957 classDefsOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
958 dataSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
959 dataOff = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
960
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
961 child_names = \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
962 'magic checksum signature fileSize headerSize endianTag ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
963 'linkSize linkOff mapOff stringIdsSize stringIdsOff typeIdsSize ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
964 'typeIdsOff protoIdsSize protoIdsOff fieldIdsSize fieldIdsOff ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
965 'methodIdsSize methodIdsOff classDefsSize classDefsOff ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
966 'dataSize dataOff'.split()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
967 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
968
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
969
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
970 class _DEX_MapItem(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
971 type = uint16
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
972 unused = uint16
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
973 size = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
974 offset = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
975
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
976 types = {
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
977 0x0000: 'kDexTypeHeaderItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
978 0x0001: 'kDexTypeStringIdItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
979 0x0002: 'kDexTypeTypeIdItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
980 0x0003: 'kDexTypeProtoIdItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
981 0x0004: 'kDexTypeFieldIdItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
982 0x0005: 'kDexTypeMethodIdItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
983 0x0006: 'kDexTypeClassDefItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
984 0x1000: 'kDexTypeMapList',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
985 0x1001: 'kDexTypeTypeList',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
986 0x1002: 'kDexTypeAnnotationSetRefList',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
987 0x1003: 'kDexTypeAnnotationSetItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
988 0x2000: 'kDexTypeClassDataItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
989 0x2001: 'kDexTypeCodeItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
990 0x2002: 'kDexTypeStringDataItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
991 0x2003: 'kDexTypeDebugInfoItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
992 0x2004: 'kDexTypeAnnotationItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
993 0x2005: 'kDexTypeEncodedArrayItem',
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
994 0x2006: 'kDexTypeAnnotationsDirectoryItem'
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
995 }
131
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 127
diff changeset
996
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 127
diff changeset
997 name_to_types = dict([(_name, _typenum)
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 127
diff changeset
998 for _typenum, _name in types.items()])
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
999
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1000 child_names = \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1001 'type unused size offset'.split()
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1002 pass
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1003
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1004
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1005 class _DEX_MapItemBlock(composite):
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
1006 padding = auto_align(2)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1007 num = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1008 items = array('num', _DEX_MapItem)
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1009
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 121
diff changeset
1010 child_names = 'padding num items'.split()
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1011 pass
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1012
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1013
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1014 class _DEX_StringId(composite):
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
1015 stringDataOff = depend_off('_DEX_StringDataItem')(uint32)
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1016
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1017 child_names = ('stringDataOff',)
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1018
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1019 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1020 assert isinstance(other, _DEX_StringId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1021 assert isinstance(self.stringDataOff, _DEX_StringDataItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1022 assert isinstance(other.stringDataOff, _DEX_StringDataItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1023
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1024 return cmp(self.stringDataOff.data.data, other.stringDataOff.data.data)
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1025 pass
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1026
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1027
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1028 class _DEX_TypeId(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1029 descriptorIdx = depend_idx('DEXFile.stringIds')(uint32)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1030
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1031 child_names = ('descriptorIdx',)
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1032
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1033 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1034 assert isinstance(other, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1035 assert isinstance(self.descriptorIdx, _DEX_StringId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1036 assert isinstance(other.descriptorIdx, _DEX_StringId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1037
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1038 return cmp(self.descriptorIdx, other.descriptorIdx)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1039 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1040
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1041
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1042 class _DEX_ProtoId(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1043 shortyIdx = depend_idx('DEXFile.stringIds')(uint32)
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1044 returnTypeIdx = depend_idx('DEXFile.typeIds')(uint32)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1045 parametersOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1046 parametersOffRef = cond((lambda parent, data, off: parent.parametersOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1047 depend_off('_DEX_TypeList')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1048 (value_ref('_DEX_ProtoId.parametersOff')))
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1049
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1050 child_names = 'shortyIdx returnTypeIdx parametersOff ' \
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1051 'parametersOffRef'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1052
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1053 ## \brief Compare two linked _DEX_ProtoId instances.
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1054 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1055 assert isinstance(other, _DEX_ProtoId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1056 assert isinstance(self.returnTypeIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1057 assert isinstance(other.returnTypeIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1058
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1059 r = cmp(self.returnTypeIdx, other.returnTypeIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1060 if r != 0:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1061 return r
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1062 if not self.parametersOffRef.is_true:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1063 return -1
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1064 if not other.parametersOffRef.is_true:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1065 return 1
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1066
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1067 tlist0 = self.parametersOffRef.value.typeItems.items
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1068 tlist1 = other.parametersOffRef.value.typeItems.items
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1069 for param0, param1 in map(None, tlist0, tlist1):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1070 if not (param0 and param1):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1071 break
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1072
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1073 r = cmp(param0.typeIdx, param1.typeIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1074 if r != 0:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1075 return r
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1076 pass
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1077
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1078 return cmp(len(tlist0), len(tlist1))
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1079 pass
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1080
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
1081
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1082 class _DEX_FieldId(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1083 classIdx = depend_idx('DEXFile.typeIds')(uint16)
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1084 typeIdx = depend_idx('DEXFile.typeIds')(uint16)
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1085 nameIdx = depend_idx('DEXFile.stringIds')(uint32)
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1086
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1087 child_names = 'classIdx typeIdx nameIdx'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1088
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1089 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1090 assert isinstance(other, _DEX_FieldId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1091 assert isinstance(self.classIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1092 assert isinstance(other.classIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1093
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1094 r = cmp(self.classIdx, other.classIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1095 if r != 0:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1096 return r
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1097 r = cmp(self.nameIdx, other.nameIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1098 if r != 0:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1099 return r
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1100 r = cmp(self.typeIdx, other.typeIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1101 return r
0
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1102 pass
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1103
31050a971b52 Project ParaSpace
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1104
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1105 class _DEX_MethodId(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1106 classIdx = depend_idx('DEXFile.typeIds')(uint16)
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1107 protoIdx = depend_idx('DEXFile.protoIds')(uint16)
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1108 nameIdx = depend_idx('DEXFile.stringIds')(uint32)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1109
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1110 child_names = 'classIdx protoIdx nameIdx'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1111
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1112 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1113 assert isinstance(other, _DEX_MethodId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1114 assert isinstance(self.classIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1115 assert isinstance(other.classIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1116
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1117 r = cmp(self.classIdx, other.classIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1118 if r != 0:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1119 return r
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1120 r = cmp(self.nameIdx, other.nameIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1121 if r != 0:
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1122 return r
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1123 r = cmp(self.typeIdx, other.protoIdx)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1124 return r
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1125 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1126
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1127
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1128 class _DEX_ClassDef(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1129 classIdx = depend_idx('DEXFile.typeIds')(uint32)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1130 accessFlags = uint32
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1131 superclassIdx = depend_idx('DEXFile.typeIds')(uint32)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1132 interfacesOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1133 interfacesOffRef = cond((lambda parent, data, off: parent.interfacesOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1134 depend_off('_DEX_TypeList')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1135 (value_ref('_DEX_ClassDef.interfacesOff')))
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1136 sourceFileIdx = depend_idx('DEXFile.stringIds')(uint32)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1137 annotationsOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1138 annotationsOffRef = cond((lambda parent, data, off: parent.annotationsOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1139 depend_off('_DEX_AnnotationsDirectoryItem')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1140 (value_ref('_DEX_ClassDef.annotationsOff')))
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1141 classDataOff = uint32
81
7adb8c3b3c44 Add classDataOffRef for _DEX_ClassDef
Thinker K.F. Li <thinker@codemud.net>
parents: 79
diff changeset
1142 classDataOffRef = cond((lambda parent, data, off: parent.classDataOff),
7adb8c3b3c44 Add classDataOffRef for _DEX_ClassDef
Thinker K.F. Li <thinker@codemud.net>
parents: 79
diff changeset
1143 depend_off('_DEX_ClassData')
7adb8c3b3c44 Add classDataOffRef for _DEX_ClassDef
Thinker K.F. Li <thinker@codemud.net>
parents: 79
diff changeset
1144 (value_ref('_DEX_ClassDef.classDataOff')))
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1145 staticValuesOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1146 staticValuesOffRef = cond((lambda parent, data, off:
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1147 parent.staticValuesOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1148 depend_off('_DEX_EncodedArrayItem')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1149 (value_ref('_DEX_ClassDef.staticValuesOff')))
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1150
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1151 child_names = \
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1152 'classIdx accessFlags superclassIdx interfacesOff interfacesOffRef ' \
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1153 'sourceFileIdx annotationsOff annotationsOffRef ' \
98
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1154 'classDataOff classDataOffRef staticValuesOff ' \
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1155 'staticValuesOffRef'.split()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1156 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1157
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1158
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1159 class _DEX_ClassDataHeader(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1160 staticFieldsSize = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1161 instanceFieldsSize = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1162 directMethodsSize = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1163 virtualMethodsSize = uleb128
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1164
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1165 child_names = \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1166 'staticFieldsSize instanceFieldsSize directMethodsSize ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1167 'virtualMethodsSize'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1168 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1169
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1170
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1171 class _DEX_Field(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1172 fieldIdx = depend_idx('DEXFile.fieldIds')(uleb128)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1173 accessFlags = uleb128
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1174
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1175 child_names = 'fieldIdx accessFlags'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1176 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1177
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1178
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1179 class _DEX_Method(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1180 methodIdx = depend_idx('DEXFile.methodIds')(uleb128)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1181 accessFlags = uleb128
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1182 codeOff = uleb128
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1183 codeOffRef = cond((lambda parent, data, off: parent.codeOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1184 depend_off('_DEX_Code')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1185 (value_ref('_DEX_Method.codeOff')))
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1186
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1187 child_names = 'methodIdx accessFlags codeOff codeOffRef'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1188 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1189
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1190
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1191 class _DEX_ClassData(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1192 header = _DEX_ClassDataHeader
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1193 staticFields = array('header.staticFieldsSize', _DEX_Field)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1194 instanceFields = array('header.instanceFieldsSize', _DEX_Field)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1195 directMethods = array('header.directMethodsSize', _DEX_Method)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1196 virtualMethods = array('header.virtualMethodsSize', _DEX_Method)
6
917f0a9b9d06 Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents: 5
diff changeset
1197
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1198 child_names = \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1199 'header ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1200 'staticFields instanceFields directMethods virtualMethods'.split()
6
917f0a9b9d06 Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents: 5
diff changeset
1201 pass
917f0a9b9d06 Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents: 5
diff changeset
1202
917f0a9b9d06 Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents: 5
diff changeset
1203
106
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1204 class _DEX_TypeList_typeid(composite):
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1205 typeIdx = depend_idx('DEXFile.typeIds')(uint16)
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1206
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1207 child_names = ('typeIdx',)
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1208 pass
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1209
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1210
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1211 class _DEX_TypeList(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1212 num = uint32
106
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
1213 typeItems = array('num', _DEX_TypeList_typeid)
6
917f0a9b9d06 Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents: 5
diff changeset
1214
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1215 child_names = 'num typeItems'.split()
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1216 pass
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1217
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1218
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1219 class _DEX_TypeList_align(composite):
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1220 padding = auto_align(2) # 2 bits alignment
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1221 value = _DEX_TypeList
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1222
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1223 child_names = 'padding value'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1224 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1225
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1226
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1227 class _DEX_Try(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1228 startAddr = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1229 insnCount = uint16
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
1230 handlerOff = depend_off_rel('_DEX_Code.handlers_size',
57
fa8fe7d714b9 Fix semantic bug of dexfile.depend_off_rel by searching relative offset.
Thinker K.F. Li <thinker@codemud.net>
parents: 55
diff changeset
1231 '_DEX_Catch')(uint16)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1232
57
fa8fe7d714b9 Fix semantic bug of dexfile.depend_off_rel by searching relative offset.
Thinker K.F. Li <thinker@codemud.net>
parents: 55
diff changeset
1233 child_names = 'startAddr insnCount handlerOff'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1234 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1235
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1236
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1237 class _DEX_CatchHandler(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1238 typeIdx = depend_idx('DEXFile.typeIds')(uleb128)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1239 address = uleb128
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1240
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1241 child_names = 'typeIdx address'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1242 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1243
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1244
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1245 class _DEX_CatchAllHandler(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1246 address = uleb128
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1247
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1248 child_names = 'address'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1249 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1250
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1251
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1252 class _DEX_Catch(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1253 size = leb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1254 handlers = array('count', _DEX_CatchHandler)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1255 catchAllHandler = cond((lambda parent, data, off: parent.catchesAll),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1256 _DEX_CatchAllHandler)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1257
57
fa8fe7d714b9 Fix semantic bug of dexfile.depend_off_rel by searching relative offset.
Thinker K.F. Li <thinker@codemud.net>
parents: 55
diff changeset
1258 child_names = 'size handlers catchAllHandler'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1259
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1260 @property
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1261 def catchesAll(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1262 return self.size <= 0
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1263
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1264 @property
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1265 def count(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1266 if self.size < 0:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1267 return -self.size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1268 return self.size
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1269 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1270
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1271
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1272 class _DEX_Code(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1273 registersSize = uint16
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1274 insSize = uint16
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1275 outsSize = uint16
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1276 triesSize = uint16
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
1277 debugInfoOff = depend_off('_DEX_DebugInfoItem')(uint32)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1278 insnsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1279 insns = rawstr_size_name('insnsSize', 2)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1280
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1281 _has_tries = lambda parent, data, off: parent.triesSize > 0
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1282
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1283 padding = cond(_has_tries, auto_align(2))
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1284 try_items = cond(_has_tries,
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1285 array('triesSize', _DEX_Try))
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1286
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1287 handlers_size = cond(_has_tries, uleb128)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1288 catch_handler_items = cond(_has_tries,
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1289 array('handlers_size.value', _DEX_Catch))
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1290
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1291 padding2 = auto_align(2)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1292
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1293 child_names = \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1294 'registersSize insSize outsSize triesSize debugInfoOff ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1295 'insnsSize insns padding try_items handlers_size ' \
57
fa8fe7d714b9 Fix semantic bug of dexfile.depend_off_rel by searching relative offset.
Thinker K.F. Li <thinker@codemud.net>
parents: 55
diff changeset
1296 'catch_handler_items padding2'.split()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1297 pass
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1298
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1299
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1300 class _DEX_AnnotationSetItem(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1301 size = uint32
17
d0806672da04 Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 15
diff changeset
1302 annotationOffs = array('size', depend_off('_DEX_AnnotationItem')(uint32))
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1303
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1304 child_names = 'size annotationOffs'.split()
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1305 pass
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1306
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
1307
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1308 class _DEX_FieldAnnotationsItem(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1309 fieldIdx = depend_idx('DEXFile.fieldIds')(uint32)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1310 annotationsOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1311 annotationsOffRef = cond((lambda parent, data, off: parent.annotationsOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1312 depend_off('_DEX_AnnotationSetItem')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1313 (value_ref('_DEX_FieldAnnotationsItem.'
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1314 'annotationsOff')))
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1315
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1316 child_names = 'fieldIdx annotationsOff annotationsOffRef'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1317
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1318 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1319 assert isinstance(other, _DEX_FieldAnnotationsItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1320 assert isinstance(self.fieldIdx, _DEX_FieldId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1321 assert isinstance(other.fieldIdx, _DEX_FieldId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1322
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1323 return cmp(self.fieldIdx, other.fieldIdx)
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1324 pass
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1325
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1326
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1327 class _DEX_MethodAnnotationsItem(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1328 methodIdx = depend_idx('DEXFile.methodIds')(uint32)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1329 annotationsOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1330 annotationsOffRef = cond((lambda parent, data, off: parent.annotationsOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1331 depend_off('_DEX_AnnotationSetItem')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1332 (value_ref('_DEX_MethodAnnotationsItem.'
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1333 'annotationsOff')))
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1334
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1335 child_names = 'methodIdx annotationsOff annotationsOffRef'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1336
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1337 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1338 assert isinstance(other, _DEX_MethodAnnotationsItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1339 assert isinstance(self.methodIdx, _DEX_MethodId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1340 assert isinstance(other.methodIdx, _DEX_MethodId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1341
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1342 return cmp(self.methodIdx, other.methodIdx)
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1343 pass
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1344
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1345
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1346 class _DEX_ParameterAnnotationsItem(composite):
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1347 methodIdx = depend_idx('DEXFile.methodIds')(uint32)
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1348 annotationsOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1349 annotationsOffRef = cond((lambda parent, data, off: parent.annotationsOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1350 depend_off('_DEX_AnnotationSetItem')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1351 (value_ref('_DEX_ParameterAnnotationsItem.'
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1352 'annotationsOff')))
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1353
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1354 child_names = 'methodIdx annotationsOff annotationsOffRef'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1355
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1356 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1357 assert isinstance(other, _DEX_ParameterAnnotationsItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1358 assert isinstance(self.methodIdx, _DEX_MethodId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1359 assert isinstance(other.methodIdx, _DEX_MethodId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1360
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1361 return cmp(self.methodIdx, other.methodIdx)
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1362 pass
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1363
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1364
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1365 class _DEX_AnnotationsDirectoryItem(composite):
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1366 classAnnotationsOff = uint32
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1367 classAnnotationsOffRef = cond((lambda parent, data, off:
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1368 parent.classAnnotationsOff),
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1369 depend_off('_DEX_AnnotationSetItem')
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1370 (value_ref('_DEX_AnnotationsDirectoryItem.'
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1371 'classAnnotationsOff')))
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1372 fieldsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1373 methodsSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1374 parametersSize = uint32
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1375
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1376 fieldAnnotationsItems = array_sorted('fieldsSize',
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1377 _DEX_FieldAnnotationsItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1378 methodAnnotationsItems = array_sorted('methodsSize',
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1379 _DEX_MethodAnnotationsItem)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1380 parameterAnnotationsItems = array_sorted('parametersSize',
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1381 _DEX_ParameterAnnotationsItem)
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
1382
41
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1383 child_names = 'classAnnotationsOff classAnnotationsOffRef ' \
c5cfc796af8b Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents: 40
diff changeset
1384 'fieldsSize methodsSize ' \
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1385 'parametersSize fieldAnnotationsItems methodAnnotationsItems ' \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1386 'parameterAnnotationsItems'.split()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1387 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1388
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1389
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1390 class _DEX_AnnotationArray(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1391 size = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1392 # annotations = array('size', _DEX_AnnotationMember_noname)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1393
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1394 child_names = 'size annotations'.split()
3
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
1395 pass
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
1396
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
1397
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1398 ##
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1399 #
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1400 # \see createAnnotationMember() in dalvik/vm/reflect/Annotation.c
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1401 #
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1402 class _DEX_AnnotationMember_noname(composite):
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1403 #
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1404 # Constants from DexFile.h
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1405 #
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1406 kDexAnnotationByte = 0x00
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1407 kDexAnnotationShort = 0x02
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1408 kDexAnnotationChar = 0x03
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1409 kDexAnnotationInt = 0x04
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1410 kDexAnnotationLong = 0x06
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1411 kDexAnnotationFloat = 0x10
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1412 kDexAnnotationDouble = 0x11
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1413 kDexAnnotationString = 0x17
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1414 kDexAnnotationType = 0x18
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1415 kDexAnnotationField = 0x19
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1416 kDexAnnotationMethod = 0x1a
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1417 kDexAnnotationEnum = 0x1b
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1418 kDexAnnotationArray = 0x1c
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1419 kDexAnnotationAnnotation = 0x1d
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1420 kDexAnnotationNull = 0x1e
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1421 kDexAnnotationBoolean = 0x1f
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1422
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1423 kDexAnnotationValueTypeMask = 0x1f
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1424 kDexAnnotationValueArgShift = 5
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1425
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1426 valueType = uint8
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1427 value_map = {
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1428 kDexAnnotationByte: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1429 kDexAnnotationShort: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1430 kDexAnnotationChar: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1431 kDexAnnotationInt: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1432 kDexAnnotationLong: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1433 kDexAnnotationFloat: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1434 kDexAnnotationDouble: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1435 kDexAnnotationString: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1436 kDexAnnotationType: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1437 kDexAnnotationMethod: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1438 kDexAnnotationField: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1439 kDexAnnotationEnum: rawstr_size_name('value_width'),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1440 kDexAnnotationNull: abs_value(0),
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1441 kDexAnnotationBoolean: abs_value(0), # width != 0
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1442 kDexAnnotationArray: _DEX_AnnotationArray,
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1443 # kDexAnnotationAnnotation: _DEX_AnnotationItem_novisibility
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1444 }
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1445 value = switch('vtype', value_map)
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1446
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1447 child_names = 'valueType value'.split()
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1448
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1449 @property
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1450 def vtype(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1451 vtype = self.valueType & self.kDexAnnotationValueTypeMask
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1452 return vtype
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1453
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1454 @property
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1455 def width(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1456 width = self.valueType >> self.kDexAnnotationValueArgShift
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1457 return width
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1458
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1459 @property
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1460 def value_width(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1461 width = self.valueType >> self.kDexAnnotationValueArgShift
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1462 return width + 1
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1463 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1464
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1465
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1466 class _DEX_AnnotationMember(_DEX_AnnotationMember_noname):
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1467 nameIdx = depend_idx('DEXFile.stringIds')(uleb128)
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1468
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1469 child_names = 'nameIdx valueType value'.split()
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1470
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1471 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1472 assert isinstance(other, _DEX_AnnotationMember)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1473 assert isinstance(self.nameIdx, _DEX_StringId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1474 assert isinstance(other.nameIdx, _DEX_StringId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1475
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1476 return cmp(self.nameIdx, other.nameIdx)
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1477 pass
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1478
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1479
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1480 _DEX_AnnotationArray.annotations = array('size', _DEX_AnnotationMember_noname)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1481
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1482
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1483 ## \brief Annotation item
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1484 #
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1485 # \see processEncodedAnnotation() in dalvik/vm/reflect/Annotation.c
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1486 #
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1487 class _DEX_AnnotationItem_novisibility(composite):
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1488 typeIdx = depend_idx('DEXFile.typeIds')(uleb128)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1489 size = uleb128
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1490 members = array_sorted('size', _DEX_AnnotationMember)
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1491
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1492 child_names = 'typeIdx size members'.split()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1493
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1494 kDexVisibilityBuild = 0x00
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1495 kDexVisibilityRuntime = 0x01
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1496 kDexVisibilitySystem = 0x02
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1497
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1498 def __cmp__(self, other):
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1499 assert isinstance(other, _DEX_AnnotationItem_novisibility)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1500 assert isinstance(self.typeIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1501 assert isinstance(other.typeIdx, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1502
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1503 return cmp(self.typeIdx, other.typeIdx)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1504 pass
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1505
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1506
19
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1507 class _DEX_AnnotationItem(_DEX_AnnotationItem_novisibility):
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1508 visibility = uint8
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1509
6008b9a9d33e Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 18
diff changeset
1510 child_names = 'visibility typeIdx size members'.split()
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1511 pass
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1512
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
1513
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1514 _DEX_AnnotationMember. \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1515 value_map[_DEX_AnnotationMember.kDexAnnotationAnnotation] = \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1516 _DEX_AnnotationItem_novisibility
10
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
1517
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
1518
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1519 class _DEX_EncodedArrayItem(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1520 size = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1521 elements = array('size', _DEX_AnnotationMember_noname)
10
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
1522
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1523 child_names = 'size elements'.split()
10
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
1524 pass
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
1525
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
1526
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
1527 class _DEX_DebugCodeBlock(_dex_type):
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1528 DBG_END_SEQUENCE = 0x00
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1529 DBG_ADVANCE_PC = 0x01
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1530 DBG_ADVANCE_LINE = 0x02
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1531 DBG_START_LOCAL = 0x03
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1532 DBG_START_LOCAL_EXTENDED = 0x04
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1533 DBG_END_LOCAL = 0x05
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1534 DBG_RESTART_LOCAL = 0x06
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1535 DBG_SET_PROLOGUE_END = 0x07
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1536 DBG_SET_EPILOGUE_BEGIN = 0x08
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1537 DBG_SET_FILE = 0x09
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1538 DBG_FIRST_SPECIAL = 0x0a
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1539 DBG_LINE_BASE = -4
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1540 DBG_LINE_RANGE = 15
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1541
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1542 opcodes = None
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1543 data_size = None
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1544
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1545 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1546 def parse(parent, data, off):
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1547 moff = man_off(off)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1548
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1549 self = _DEX_DebugCodeBlock()
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1550
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1551 #
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1552 # Parse debug opcodes
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1553 #
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1554 opcodes = []
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1555 while True:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1556 opcode = _to_uint(data[moff(1):moff()])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1557
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1558 if opcode == self.DBG_END_SEQUENCE:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1559 opcodes.append((opcode,))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1560 break
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1561 elif opcode == self.DBG_ADVANCE_PC:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1562 adv, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1563 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1564 opcodes.append((opcode, adv))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1565 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1566 elif opcode == self.DBG_ADVANCE_LINE:
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1567 adv, sh = _leb128(data[moff():moff() + 5])
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1568 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1569 opcodes.append((opcode, adv))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1570 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1571 elif opcode in (self.DBG_START_LOCAL,
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1572 self.DBG_START_LOCAL_EXTENDED):
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1573 reg, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1574 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1575 name, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1576 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1577 descriptor, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1578 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1579 if opcode == self.DBG_START_LOCAL_EXTENDED:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1580 signature, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1581 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1582 opcodes.append((opcode, reg, name, descriptor, signature))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1583 else:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1584 opcodes.append((opcode, reg, name, descriptor))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1585 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1586 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1587 elif opcode == self.DBG_END_LOCAL:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1588 reg, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1589 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1590 opcodes.append((opcode, reg))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1591 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1592 elif opcode == self.DBG_RESTART_LOCAL:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1593 reg, sh = _uleb128(data[moff():moff() + 5])
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1594 moff(sh)
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1595 opcodes.append((opcode, reg))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1596 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1597 elif opcode in (self.DBG_SET_PROLOGUE_END,
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1598 self.DBG_SET_EPILOGUE_BEGIN,
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1599 self.DBG_SET_FILE):
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1600 opcodes.append((opcode,))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1601 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1602 else:
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1603 opcodes.append((opcode,))
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1604 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1605 pass
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1606 self.opcodes = tuple(opcodes)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1607
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1608 self.data_size = moff() - off
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1609
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1610 return self
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1611
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1612 def compute_size(self):
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
1613 import itertools
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
1614
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1615 def compute_opcode_size(code):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1616 opcode = code[0]
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1617
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1618 if opcode == self.DBG_END_SEQUENCE:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1619 size = 1
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1620 elif opcode == self.DBG_ADVANCE_PC:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1621 size = 1 + _uleb128_sz(code[1])
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1622 elif opcode == self.DBG_ADVANCE_LINE:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1623 size = 1 + _leb128_sz(code[1])
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1624 elif opcode in (self.DBG_START_LOCAL,
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1625 self.DBG_START_LOCAL_EXTENDED):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1626 size = 1 + _uleb128_sz(code[1]) + _uleb128_sz(code[2]) + \
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1627 _uleb128_sz(code[3])
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1628 if len(code) == 5:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1629 size = size + _uleb128_sz(code[4])
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1630 pass
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1631 pass
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1632 elif opcode == self.DBG_END_LOCAL:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1633 size = 1 + _uleb128_sz(code[1])
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1634 elif opcode == self.DBG_RESTART_LOCAL:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1635 size = 1 + _uleb128_sz(code[1])
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1636 elif opcode in (self.DBG_SET_PROLOGUE_END,
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1637 self.DBG_SET_EPILOGUE_BEGIN,
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1638 self.DBG_SET_FILE):
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1639 size = 1
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1640 else:
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1641 size = 1
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1642 pass
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1643
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1644 return size
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1645
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1646 opcode_sizes = itertools.imap(compute_opcode_size, self.opcodes)
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1647 opcode_sizes = [i for i in opcode_sizes]
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1648 opcodes_size = sum(opcode_sizes)
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1649
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1650 self.data_size = opcodes_size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1651 pass
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
1652
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
1653 @staticmethod
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
1654 def sizeof(obj):
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
1655 return obj.data_size
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1656
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
1657 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1658 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1659 #
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1660 # Parse debug opcodes
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1661 #
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1662 opcodes = self.opcodes
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1663 opcodebins = []
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1664 for code in opcodes:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1665 opcode = code[0]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1666
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1667 if opcode == self.DBG_END_SEQUENCE:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1668 opcodebins.append(chr(opcode))
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1669 break
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1670 elif opcode == self.DBG_ADVANCE_PC:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1671 codebin = chr(opcode) + _to_uleb128(code[1])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1672 opcodebins.append(codebin)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1673 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1674 elif opcode == self.DBG_ADVANCE_LINE:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1675 codebin = chr(opcode) + _to_leb128(code[1])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1676 opcodebins.append(codebin)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1677 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1678 elif opcode == self.DBG_START_LOCAL:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1679 codebin = chr(opcode) + _to_uleb128(code[1]) + \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1680 _to_uleb128(code[2]) + _to_uleb128(code[3])
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
1681 opcodebins.append(codebin)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1682 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1683 elif opcode == self.DBG_START_LOCAL_EXTENDED:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1684 codebin = chr(opcode) + _to_uleb128(code[1]) + \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1685 _to_uleb128(code[2]) + _to_uleb128(code[3]) + \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1686 _to_uleb128(code[4])
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
1687 opcodebins.append(codebin)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1688 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1689 elif opcode == self.DBG_END_LOCAL:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1690 codebin = chr(opcode) + _to_uleb128(code[1])
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
1691 opcodebins.append(codebin)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1692 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1693 elif opcode == self.DBG_RESTART_LOCAL:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1694 codebin = chr(opcode) + _to_uleb128(code[1])
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
1695 opcodebins.append(codebin)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1696 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1697 elif opcode in (self.DBG_SET_PROLOGUE_END,
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1698 self.DBG_SET_EPILOGUE_BEGIN,
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1699 self.DBG_SET_FILE):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1700 opcodebins.append(chr(opcode))
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1701 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1702 else:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1703 opcodebins.append(chr(opcode))
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1704 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1705 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1706
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1707 return ''.join(opcodebins)
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1708
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1709 def children(self):
53
705356005362 Fix bug of install marker through ref
Thinker K.F. Li <thinker@codemud.net>
parents: 51
diff changeset
1710 return ()
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1711 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1712
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1713
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1714 class _DEX_DebugInfoItem(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1715 start_line = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1716 parameters_size = uleb128
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1717 parameters = array('parameters_size', uleb128)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1718 opcodes = _DEX_DebugCodeBlock
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1719
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1720 child_names = 'start_line parameters_size parameters opcodes'.split()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1721 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1722
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1723
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1724 class _DEX_StringDataItem(composite):
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1725 size = uleb128
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1726 data = rawstr_size_name('size')
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1727 padding = rawstr(1)
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1728
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1729 child_names = 'size data padding'.split()
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1730 pass
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1731
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1732
27
15cb829ac442 travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 25
diff changeset
1733 class dummy(_dex_type):
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1734 data_size = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1735
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1736 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1737 def parse(parent, data, off):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1738 size, sh = _uleb128(data[off:off + 5])
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1739 data = data[off + sh: off + sh + size]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1740
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1741 self = _DEX_StringDataItem()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1742
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1743 self.size = size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1744 self.data = data
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1745 self.data_size = sh + size + 1
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1746 return self
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1747
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1748 def compute_size(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1749 size = len(self.data)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1750 self.size = size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1751 size_sz = _uleb128_sz(size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1752 self.data_size = size_sz + size + 1
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1753 pass
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1754
65
ce1d5a058d5a Fix argument issue of to_str() of dex types
Thinker K.F. Li <thinker@codemud.net>
parents: 64
diff changeset
1755 @staticmethod
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1756 def to_str(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1757 size = len(self.data)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1758 self.size = size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1759 data = _uleb128(size) + self.data + '\x00'
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1760 return data
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1761 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1762
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1763
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1764 class DEXFile(composite):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1765 fname = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1766 data = None
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1767 header = _DEX_header
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1768 maps = _DEX_MapItemBlock
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1769 stringIds = array_sorted(None, _DEX_StringId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1770 typeIds = array_sorted(None, _DEX_TypeId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1771 protoIds = array_sorted(None, _DEX_ProtoId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1772 fieldIds = array_sorted(None, _DEX_FieldId)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1773 methodIds = array_sorted(None, _DEX_MethodId)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1774 classDefs = array(None, _DEX_ClassDef)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1775 classDatas = array(None, _DEX_ClassData)
40
0c0a659187c2 Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents: 33
diff changeset
1776 typeLists = array(None, _DEX_TypeList_align)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1777 codeItems = array(None, _DEX_Code)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1778 annotationSetItems = array(None, _DEX_AnnotationSetItem)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1779 annotationsDirectoryItems = array(None, _DEX_AnnotationsDirectoryItem)
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
1780 annotationItems = array_sorted(None, _DEX_AnnotationItem)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1781 encodedArrayItems = array(None, _DEX_EncodedArrayItem)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1782 debugInfoItems = array(None, _DEX_DebugInfoItem)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1783 stringDataItems = array(None, _DEX_StringDataItem)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1784
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1785 child_names = 'header'.split()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1786
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1787 block_defs = {
50
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1788 0x0000: 'header',
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1789 0x0001: 'stringIds',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1790 0x0002: 'typeIds',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1791 0x0003: 'protoIds',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1792 0x0004: 'fieldIds',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1793 0x0005: 'methodIds',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1794 0x0006: 'classDefs',
50
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1795 0x1000: 'maps',
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1796 0x1001: 'typeLists',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1797 # 0x1002: 'kDexTypeAnnotationSetRefList',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1798 0x1003: 'annotationSetItems',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1799 0x2000: 'classDatas',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1800 0x2001: 'codeItems',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1801 0x2002: 'stringDataItems',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1802 0x2003: 'debugInfoItems',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1803 0x2004: 'annotationItems',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1804 0x2005: 'encodedArrayItems',
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1805 0x2006: 'annotationsDirectoryItems'
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1806 }
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1807
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1808 @staticmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1809 def open(fname):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1810 fo = file(fname, 'r')
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1811 data = fo.read()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1812
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1813 dex = DEXFile.parse(data)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1814 dex.fname = fname
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1815 return dex
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1816
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1817 @classmethod
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1818 def parse(clazz, data):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1819 obj = super(DEXFile, clazz).parse(None, data, 0)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1820 obj.data = data
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1821 obj._parse(data)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1822 return obj
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1823
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1824 def _parse_maps(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1825 data = self.data
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1826 header = self.header
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1827 off = header.mapOff
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1828 self.parse_child('maps', data, off)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1829 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1830
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1831 def _parse_block(self, block_map):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1832 if block_map.type not in self.block_defs:
86
793af8437efe Warning for unknown map type
Thinker K.F. Li <thinker@codemud.net>
parents: 81
diff changeset
1833 import sys
793af8437efe Warning for unknown map type
Thinker K.F. Li <thinker@codemud.net>
parents: 81
diff changeset
1834 print >> sys.stderr, \
793af8437efe Warning for unknown map type
Thinker K.F. Li <thinker@codemud.net>
parents: 81
diff changeset
1835 'Warning: unknown map type 0x%x' % (block_map.type)
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1836 return
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1837
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1838 data = self.data
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1839
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1840 child_name = self.block_defs[block_map.type]
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1841 off = block_map.offset
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1842 num = block_map.size
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1843
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1844 child_clazz = getattr(self.__class__, child_name)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1845 blk = child_clazz.parse_nitem(self, data, off, num)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1846 setattr(self, child_name, blk)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1847 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1848
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1849 def _parse_blocks(self):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1850 data = self.data
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1851 maps = self.maps.items.items
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1852 for map in maps:
50
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1853 if map.type in (0x0000, 0x1000): # header and maps
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1854 continue
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1855 if map.type in self.block_defs:
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1856 self._parse_block(map)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1857 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1858 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1859 pass
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1860
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1861 def _parse(self, data):
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1862 self._parse_maps()
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
1863 self._parse_blocks()
13
c05fac334ab1 compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents: 12
diff changeset
1864 pass
25
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1865
670167ed06bb test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents: 24
diff changeset
1866 def children(self):
50
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1867 map_items = [self.block_defs[map_item.type]
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1868 for map_item in self.maps.items.items]
66
fa44a8acba6a Remove redundants in children list of DEXFile
Thinker K.F. Li <thinker@codemud.net>
parents: 65
diff changeset
1869 children = map_items
50
312dcf38226f construct children of DEXFile from map items
Thinker K.F. Li <thinker@codemud.net>
parents: 49
diff changeset
1870 return children
67
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1871
126
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1872 ## \biref Make SHA1 signature for DEX.
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1873 #
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1874 # This method must be called before make_checksum().
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1875 #
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1876 def make_signature(self):
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1877 from hashlib import sha1
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1878
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1879 raw = self.to_str()
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1880 sz = self.header.fileSize
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1881 nosum = _DEX_header.magic.sizeof(self.header.magic) + \
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1882 _DEX_header.checksum.sizeof(self.header.checksum) + \
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1883 _DEX_header.signature.sizeof(self.header.signature)
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1884 sha = sha1()
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1885 sha.update(raw[nosum:])
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1886 signature = sha.digest()
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1887 self.header.signature.data = signature
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1888 pass
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1889
67
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1890 def make_checksum(self):
126
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1891 from paraspace.tools import adler32, adler32_init_value
120
c7a5de2d2334 Fix issue of compute_size of various types
Thinker K.F. Li <thinker@codemud.net>
parents: 119
diff changeset
1892
67
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1893 raw = self.to_str()
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1894 sz = self.header.fileSize
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1895 nosum = _DEX_header.magic.sizeof(self.header.magic) + \
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1896 _DEX_header.checksum.sizeof(self.header.checksum)
126
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 125
diff changeset
1897 checksum = adler32(adler32_init_value, raw, nosum, sz - nosum)
67
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1898 self.header.checksum = checksum
9504ad530dbf Add DEXFile.make_checksum()
Thinker K.F. Li <thinker@codemud.net>
parents: 66
diff changeset
1899 pass
11
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1900 pass
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1901
409e2cd76f72 Parse DebugInfoItem
Thinker K.F. Li <thinker@codemud.net>
parents: 10
diff changeset
1902
93
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1903 ## \brief A linked version of a DEXFile.
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1904 #
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1905 # Instances of this class was built from instances of DEXFile.
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1906 # Dependencies are linked to depend-on objects; the target of a
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1907 # dependence.
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1908 #
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1909 class DEXFile_linked(DEXFile):
97
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
1910 _dep_decls = None
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
1911
93
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1912 def _copy_attributes(self, dex):
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1913 for attr, value in dex.__dict__.items():
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1914 setattr(self, attr, value)
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1915 pass
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1916 pass
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1917
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1918 ## \brief Factory function to return a DEXFile_linked of given DEXFile.
119
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1919 #
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1920 # \param dex is a DEXFile instance.
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1921 # \param dep_decls is a dictionary returned by prepare_dep_decls().
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1922 # \return a DEXFile_linked.
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1923 #
93
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1924 @staticmethod
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1925 def build_dependencies(dex, dep_decls):
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1926 from paraspace.dex_deptracker import build_dependencies
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1927
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1928 if not isinstance(dex, DEXFile):
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1929 raise TypeError, 'first argument must be an instance of DEXFile'
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1930
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1931 linked = DEXFile_linked()
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1932 build_dependencies(dex, dep_decls)
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1933 linked._copy_attributes(dex)
97
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
1934
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
1935 linked._dep_decls = dep_decls
93
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1936
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
1937 return linked
94
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1938
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1939 ## \brief Return name string of a linked class definition item
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1940 @staticmethod
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1941 def get_classdef_name(classdef):
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1942 return DEXFile_linked.get_typeid_name(classdef.classIdx)
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1943
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1944 ## \brief Return name string of a linked type ID item.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1945 @staticmethod
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1946 def get_typeid_name(typeid):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1947 return typeid.descriptorIdx.stringDataOff.data.data
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1948
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1949 ## \brief Get index of given type ID.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1950 def get_idx_typeid(self, typeid):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1951 return self.typeIds.items.index(typeid)
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1952
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1953 ## \brief Find type ID item with given name.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1954 def find_typeid_name(self, name):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1955 for typeid in self.typeIds.items:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1956 typeid_name = DEXFile_linked.get_typeid_name(typeid)
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1957 if typeid_name == name:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1958 return typeid
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1959 pass
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1960 pass
119
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1961
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1962 ## \brief Get index of given _DEX_ClassDef.
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1963 def get_idx_classdef(self, classdef):
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1964 from paraspace.dexfile import _DEX_ClassDef
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1965 assert isinstance(classdef, _DEX_ClassDef)
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1966 typeidx = self.get_idx_typeid(classdef.classIdx)
4f508f84c8a1 Add inject_redir.py example
Thinker K.F. Li <thinker@codemud.net>
parents: 116
diff changeset
1967 return typeidx
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1968
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1969 ## \brief Return type ID item with given index.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1970 def find_typeid_idx(self, idx):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1971 return self.typeIds.items[idx]
94
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1972
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1973 def find_class_name(self, name):
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1974 for classdef in self.classDefs.items:
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1975 classdef_name = DEXFile_linked.get_classdef_name(classdef)
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1976 if classdef_name == name:
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1977 return classdef
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1978 pass
88645ab29aeb dexfile_insert_class() returns a clone object
Thinker K.F. Li <thinker@codemud.net>
parents: 93
diff changeset
1979 raise ValueError, 'can not find class definition for \'%s\'' % (name)
97
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
1980
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1981 ## \brief Return a class definition corresponding for give type ID.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1982 def find_class_typeid(self, typeid):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1983 for classdef in self.classDefs.items:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1984 if classdef.classIdx == typeid:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1985 return classdef
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1986 pass
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1987 raise ValueError, \
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1988 'can not find class definition for typeid %s' % (repr(typeid))
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
1989
98
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1990 ## \brief Update size of map items.
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1991 #
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1992 # Corresponding data lists of maps may be changed, it should be updated
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1993 # before restore dependencies and keep it consistent.
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1994 #
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1995 def _update_map_sizes(self):
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1996 for mapitem in self.maps.items.items:
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1997 attr = DEXFile.block_defs[mapitem.type]
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1998 datalist = getattr(self, attr)
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
1999 if isinstance(datalist, array):
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2000 mapitem.size = len(datalist.items)
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2001 pass
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2002 pass
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2003 pass
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2004
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2005 ## \brief Return an unlinked version.
97
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2006 def get_unlinked(self):
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2007 from paraspace.dex_deptracker import restore_dependencies
98
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2008
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2009 self._update_map_sizes()
c0c127c7b37e Check and fix issues of map sizes
Thinker K.F. Li <thinker@codemud.net>
parents: 97
diff changeset
2010
97
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2011 unlinked = DEXFile()
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2012 for attr, value in self.__dict__.items():
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2013 setattr(unlinked, attr, value)
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2014 pass
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2015
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2016 restore_dependencies(unlinked, self._dep_decls)
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2017
00cd331f8aa8 Get unlinked one from a linked one
Thinker K.F. Li <thinker@codemud.net>
parents: 95
diff changeset
2018 return unlinked
101
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2019
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2020 ## \brief Insert a linked class definition into the DEX file.
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2021 def insert_class(self, classdef):
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2022 from paraspace.injection import dexfile_insert_class
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2023
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2024 assert isinstance(classdef, _DEX_ClassDef)
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2025
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2026 clone = dexfile_insert_class(self, classdef)
b2db11aed6b8 Provide method of insert class definition in DEXFile_linked class.
Thinker K.F. Li <thinker@codemud.net>
parents: 98
diff changeset
2027 return clone
102
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2028
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2029 ## \brief Get name string of given method.
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2030 @staticmethod
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2031 def get_method_name(method):
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2032 methodid = method.methodIdx
108
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2033 return DEXFile_linked.get_methodid_name(methodid)
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2034
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2035 ## \brief Get name string of given method ID.
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2036 @staticmethod
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2037 def get_methodid_name(methodid):
102
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2038 namestrid = methodid.nameIdx
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2039 namestrdata = namestrid.stringDataOff
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2040 name_str = namestrdata.data.data
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2041 return name_str
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2042
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2043 ## \brief Find the method of given method name and class definition.
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2044 #
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2045 # \param method_name is the method name.
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2046 # \param classdef is a _DEX_ClassDef.
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2047 # \return the corresponding _DEX_Method of given method_name and classdef.
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2048 #
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2049 def find_method_name(self, method_name, classdef):
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2050 if not classdef.classDataOffRef.is_true:
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2051 return
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2052
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2053 classdata = classdef.classDataOffRef.value
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2054 for wmethod in classdata.directMethods.items + \
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2055 classdata.virtualMethods.items:
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2056 wmethod_name = DEXFile_linked.get_method_name(wmethod)
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2057 if method_name == wmethod_name:
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2058 return wmethod
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2059 pass
7fcd555d802b Add the function for finding method with a name
Thinker K.F. Li <thinker@codemud.net>
parents: 101
diff changeset
2060 pass
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2061
107
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2062 ## \brief Return index of given method.
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2063 def get_idx_method(self, method):
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2064 methodid = method.methodIdx
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2065 idx = self.methodIds.items.index(methodid)
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2066 return idx
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2067
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2068 ## \brief Find the method ID item of given index.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2069 def find_methodid_idx(self, idx):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2070 methodid = self.methodIds.items[idx]
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2071 return methodid
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2072
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2073 ## \brief Find a method definition with an index to method ID.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2074 def find_method_idx(self, idx):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2075 methodid = self.find_methodid_idx(idx)
108
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2076 method_name = DEXFile_linked.get_methodid_name(methodid)
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2077 method_proto = methodid.protoIdx
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2078 method_typeid = methodid.classIdx
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2079 classdef = self.find_class_typeid(method_typeid)
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2080
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2081 method = self.find_method_name_proto(method, method_proto, classdef)
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2082
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2083 return method
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2084
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2085 ## \brief Test if prototype of two methods are compatible.
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2086 @staticmethod
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2087 def _proto_is_compatible(proto1, proto2):
116
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2088 rtypename1 = DEXFile_linked.get_typeid_name(proto1.returnTypeIdx)
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2089 rtypename2 = DEXFile_linked.get_typeid_name(proto2.returnTypeIdx)
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2090 if rtypename1 != rtypename2:
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2091 return False
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2092 typelist1 = proto1.parametersOffRef.value
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2093 typelist2 = proto2.parametersOffRef.value
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2094 if len(typelist1.typeItems.items) != len(typelist2.typeItems.items):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2095 return False
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2096
106
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2097 for tl_typeid1, tl_typeid2 in map(None,
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2098 typelist1.typeItems.items,
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2099 typelist2.typeItems.items):
108
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2100 typename1 = DEXFile_linked.get_typeid_name(tl_typeid1.typeIdx)
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2101 typename2 = DEXFile_linked.get_typeid_name(tl_typeid2.typeIdx)
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2102
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2103 if typename1 != typename2:
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2104 return False
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2105 pass
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2106 return True
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2107
108
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2108 ## \brief Find the method of given name, prototype and class definition.
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2109 def find_method_name_proto(self, method_name, proto, classdef):
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2110 if not classdef.classDataOffRef.is_true:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2111 return
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2112
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2113 classdata = classdef.classDataOffRef.value
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2114 for wmethod in classdata.directMethods.items + \
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2115 classdata.virtualMethods.items:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2116 wmethod_name = DEXFile_linked.get_method_name(wmethod)
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2117 if method_name != wmethod_name:
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2118 continue
107
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2119 wmethodid = wmethod.methodIdx
4b3573d039af Fix bug of DEXFile_linked.find_method_name_proto().
Thinker K.F. Li <thinker@codemud.net>
parents: 106
diff changeset
2120 if DEXFile_linked._proto_is_compatible(wmethodid.protoIdx, proto):
104
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2121 return wmethod
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2122 pass
61cef1662035 Redirect types
Thinker K.F. Li <thinker@codemud.net>
parents: 102
diff changeset
2123 raise ValueError, 'can not find a method for given name and prototype'
106
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2124
108
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2125 ## \brief Return index of given method ID.
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2126 def get_idx_methodid(self, methodid):
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2127 idx = self.methodIds.items.index(methodid)
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2128 return idx
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2129
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2130 ## \brief Return method ID for given name, proto, and typeid/
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2131 def find_methodid_name_proto(self, method_name, proto, typeid):
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2132 for methodid in self.methodIds.items:
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2133 if method_name != DEXFile_linked.get_methodid_name(methodid):
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2134 continue
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2135 if methodid.classIdx != typeid:
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2136 continue
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2137 if not DEXFile_linked. \
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2138 _proto_is_compatible(methodid.protoIdx, proto):
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2139 continue
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2140 return methodid
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2141 raise ValueError, 'can not find the method ID for given name, ' \
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2142 'prototype and type ID'
18be67af7f1e Use method redirection map for defining redirection
Thinker K.F. Li <thinker@codemud.net>
parents: 107
diff changeset
2143
106
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2144 @staticmethod
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2145 def get_param_typeids_protoid(protoid):
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2146 if not protoid.parametersOffRef.is_true:
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2147 return ()
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2148 tl_typeids = protoid.parametersOffRef.value.typeItems.items
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2149 typeids = [tl_typeid.typeIdx
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2150 for tl_typeid in tl_typeids]
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2151 return typeids
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2152
109
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2153 ## \brief Return code block of given method.
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2154 #
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2155 # Code block is a string of byte code instructions for Dalvik VM.
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2156 #
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2157 @staticmethod
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2158 def get_code_block_method(method):
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2159 if not method.codeOffRef.is_true:
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2160 return ''
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2161
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2162 code = method.codeOffRef.value
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2163 insns = code.insns.data
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2164 return insns
835336632aba Add collect_typeidxs_in_method()
Thinker K.F. Li <thinker@codemud.net>
parents: 108
diff changeset
2165
110
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2166 ## \brief Return all method of given class definition.
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2167 @staticmethod
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2168 def get_methods_classdef(classdef):
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2169 if not classdef.classDataOffRef.is_true:
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2170 return []
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2171 classdata = classdef.classDataOffRef.value
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2172 methods = classdata.directMethods.items + \
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2173 classdata.virtualMethods.items
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2174 return methods
6380730a80b4 Add collect_typeidxs_mentioned_by_class()
Thinker K.F. Li <thinker@codemud.net>
parents: 109
diff changeset
2175
111
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2176 ## \brief Find all method IDs that is part of given type.
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2177 #
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2178 # \param typeid is ID of type that IDs of its methods will be returned.
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2179 # \return a list of method IDs.
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2180 #
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2181 def find_methodids_typeid(self, typeid):
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2182 methodids = [methodid
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2183 for methodid in self.methodIds.items
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2184 if methodid.classIdx == typeid]
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2185 return methodids
3820379b34e8 Add dexfile_insert_class_relative()
Thinker K.F. Li <thinker@codemud.net>
parents: 110
diff changeset
2186
106
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2187 ## \brief Dump content of a proto ID.
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2188 @staticmethod
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2189 def dump_protoid(protoid):
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2190 rtype_name = DEXFile_linked.get_typeid_name(protoid.returnTypeIdx)
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2191 param_types = DEXFile_linked.get_param_typeids_protoid(protoid)
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2192 ptype_names = [DEXFile_linked.get_typeid_name(ptype)
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2193 for ptype in param_types]
7821c6e89622 dexfile_redirect_types() is almost ready.
Thinker K.F. Li <thinker@codemud.net>
parents: 104
diff changeset
2194 return '(%s) --> %s' % (', '.join(ptype_names), rtype_name)
116
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2195
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2196 @staticmethod
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2197 def make_protoid(rtype, args):
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2198 arglist = _DEX_TypeList()
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2199 arglist.num = len(args)
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2200 arglist.typeItems = array(None, _DEX_TypeList_typeid)
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2201
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2202 tltypeid_args = [_DEX_TypeList_typeid()
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2203 for arg in args]
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2204 for tltypeid, arg in map(None, tltypeid_args, args):
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2205 tltypeid.typeIdx = arg
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2206 pass
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2207
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2208 arglist.typeItems.items = tltypeid_args
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2209
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2210 param_cond = cond(None, _DEX_TypeList)
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2211 param_cond.value = arglist
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2212 param_cond.is_true = True
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2213
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2214 protoid = _DEX_ProtoId()
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2215 protoid.returnTypeIdx = rtype
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2216 protoid.parametersOffRef = param_cond
c5f59bdbc916 Fix issue of proto matching.
Thinker K.F. Li <thinker@codemud.net>
parents: 111
diff changeset
2217 return protoid
93
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
2218 pass
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
2219
2fa9b6f21344 Add DEXFile_linked to model linked DEX
Thinker K.F. Li <thinker@codemud.net>
parents: 86
diff changeset
2220
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2221 if __name__ == '__main__':
75
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2222 import sys
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2223
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2224 if len(sys.argv) != 2:
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2225 print >> sys.stderr, 'Usage: %s <dex file>' % (sys.argv[0])
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2226 sys.exit(1)
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2227 pass
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2228
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2229 dex_fname = sys.argv[1]
9422a25e798d Pass filename from argument list for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 67
diff changeset
2230 dex = DEXFile.open(dex_fname)
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2231
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2232 print 'Header'
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2233 h = dex.header
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2234 for attr in h.child_names:
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2235 print '\t%s: %s' % (attr, repr(getattr(h, attr)))
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2236 pass
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2237
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2238 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2239 print 'Size of stringIds is %d bytes' % (dex.stringIds.data_size)
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2240
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2241 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2242 print 'Size of typeIds is %d bytes' % (dex.typeIds.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2243
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2244 print
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2245 print 'Size of protoIds is %d bytes' % (dex.protoIds.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2246
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2247 print
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2248 print 'Size of fieldIds is %d bytes' % (dex.fieldIds.data_size)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2249
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2250 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2251 print 'Size of methodIds is %d bytes' % (dex.methodIds.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2252
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2253 print
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2254 print 'Size of classDefs is %d bytes' % (dex.classDefs.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2255
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2256 print
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2257 print 'Size of classDatas is %d bytes' % (dex.classDatas.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2258
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2259 print
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2260 print 'Size of typeLists is %d bytes' % (dex.typeLists.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2261
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2262 print
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2263 print 'Size of codeItems is %d bytes' % (dex.codeItems.data_size)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2264
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2265 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2266 print 'Size of annotationSetItems is %d bytes' % \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2267 (dex.annotationSetItems.data_size)
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2268
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2269 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2270 print 'Size of annotationsDirectoryItems is %d bytes' % \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2271 (dex.annotationsDirectoryItems.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2272
3
a78db169b0c8 parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents: 2
diff changeset
2273 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2274 print 'Size of annotationItems is %d bytes' % \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2275 (dex.annotationItems.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2276
4
b0766f1984bb parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents: 3
diff changeset
2277 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2278 print 'Size of encodedArrayItems is %d bytes' % \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2279 (dex.encodedArrayItems.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2280
8
59dd10bf60f2 Parse annotation items
Thinker K.F. Li <thinker@codemud.net>
parents: 7
diff changeset
2281 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2282 print 'Size of debugInfoItems is %d bytes' % \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2283 (dex.debugInfoItems.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2284
10
123c7a8bbf4c Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents: 9
diff changeset
2285 print
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2286 print 'Size of stringDataItems is %d bytes' % \
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2287 (dex.stringDataItems.data_size)
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2288
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2289 print
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2290 print 'Data maps'
15
c98be35b572b Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents: 14
diff changeset
2291 maps = dex.maps.items.items
2
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2292 for map in maps:
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2293 print '\t0x%04x(%s) size=%d offset=0x%08x' % (map.type,
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2294 map.types[map.type],
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2295 map.size,
add64d56b0e2 Parse code items
Thinker K.F. Li <thinker@codemud.net>
parents: 1
diff changeset
2296 map.offset)
18
f36b14d1f122 collect dependencies for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents: 17
diff changeset
2297 pass
1
05346b632adb Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents: 0
diff changeset
2298 pass