Mercurial > paraspace
annotate paraspace/dexfile.py @ 48:3936d223989a
Introduce null_relocatable for any relocatable without real instance
- Some dex type does not own a real instance, it actually a generator of
child type.
- null_relocatable is used to classify types without real instance.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 20 Jun 2011 13:34:47 +0800 |
parents | 71218ba3bc8a |
children | 38fdd422f611 |
rev | line source |
---|---|
12
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
1 ## \brief Manage offset |
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
2 # |
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
3 # 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
|
4 # 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
|
5 # size. |
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 # moff = man_off(init_off) |
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
8 # assert moff(5) == init_off |
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
9 # assert moff() == (init_off + 5) |
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
10 # assert moff() == (init_off + 5) |
8101024c942b
Document class man_off
Thinker K.F. Li <thinker@codemud.net>
parents:
11
diff
changeset
|
11 # |
3
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
12 class man_off(object): |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
13 off = None |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
14 |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
15 def __init__(self, off): |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
16 self.off = off |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
17 pass |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
18 |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
19 def __call__(self, sz=0): |
3
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
20 off = self.off |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
21 self.off = off + sz |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
22 return off |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
23 pass |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
24 |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
25 |
0 | 26 def _to_uint(data): |
27 v = 0 | |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
28 sh = 0 |
0 | 29 for c in data: |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
30 v = v + (ord(c) << sh) |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
31 sh = sh + 8 |
0 | 32 pass |
33 return v | |
34 | |
35 | |
8 | 36 def _to_int(data): |
37 v = _to_uint(data) | |
38 sz = len(data) | |
39 if sz and ((1 << (sz * 8 - 1)) & v): | |
40 v = -((1 << (sz * 8)) - v) | |
41 pass | |
42 return v | |
43 | |
44 | |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
45 def _uleb128(data): |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
46 sh = 0 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
47 v = 0 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
48 for c in data: |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
49 cv = ord(c) |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
50 v = v + ((cv & 0x7f) << sh) |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
51 sh = sh + 7 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
52 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
53 if cv <= 0x7f: |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
54 break |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
55 pass |
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 nbytes = sh / 7 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
58 return v, nbytes |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
59 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
60 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
61 def _to_uleb128(v): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
62 assert v >= 0 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
63 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
64 data = '' |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
65 while True: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
66 if v > 0x7f: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
67 data = data + chr((v & 0x7f) | 0x80) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
68 else: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
69 data = data + chr(v & 0x7f) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
70 break |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
71 v = v >> 7 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
72 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
73 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
74 return data |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
75 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
76 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
77 def _uleb128_sz(v): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
78 return len(_to_uleb128(v)) |
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 |
2 | 81 def _leb128(data): |
82 v, sh = _uleb128(data) | |
83 if v & (1 << (sh * 7 - 1)): | |
84 v = -((1 << (sh * 7)) - v) | |
85 pass | |
86 return v, sh | |
87 | |
88 | |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
89 def _to_leb128(v): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
90 data = '' |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
91 while True: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
92 if v > 0x3f or v < ~0x3f: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
93 data = data + chr((v & 0x7f) | 0x80) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
94 else: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
95 data = data + chr(v & 0x7f) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
96 break |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
97 v = v >> 7 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
98 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
99 return data |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
100 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
101 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
102 def _leb128_sz(v): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
103 return len(_to_leb128(v)) |
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 _compute_sz(o): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
107 if hasattr(o, 'compute_size'): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
108 o.compute_size() |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
109 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
110 return o.data_size |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
111 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
112 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
113 def _sum_data_size(obj_list): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
114 obj_sizes = itertools.imap(_compute_sz, obj_list) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
115 total = sum(obj_sizes) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
116 return total |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
117 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
118 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
119 class _dex_type(object): |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
120 pass |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
121 |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
122 |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
123 class _rawstr(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
124 size = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
125 factor = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
126 data = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
127 data_size = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
128 |
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 # \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
|
131 # |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
132 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
|
133 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
134 self.size_name = size_name |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
135 self.factor = factor |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
136 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
137 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
138 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
|
139 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
|
140 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
|
141 size = self.size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
142 else: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
143 size = parent |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
144 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
|
145 size = getattr(size, name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
146 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
147 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
148 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
|
149 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
150 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
|
151 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
152 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
153 def sizeof(self, v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
154 return v.data_size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
155 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
156 def to_str(self, v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
157 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
158 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
159 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
160 class rawstr(_rawstr): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
161 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
|
162 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
|
163 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
164 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
165 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
166 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
167 class rawstr_size_name(_rawstr): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
168 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
|
169 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
|
170 factor=factor) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
171 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
172 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
173 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
174 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
175 class tap(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
176 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
177 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
|
178 return tap() |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
179 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
180 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
181 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
182 return 0 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
183 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
184 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
185 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
186 return '' |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
187 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
188 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
189 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
190 class uint32(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
191 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
192 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
193 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
|
194 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
195 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
196 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
197 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
198 return 4 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
199 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
200 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
201 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
202 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
|
203 chr((v >> 24) & 0xff) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
204 pass |
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 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
207 class uint16(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
208 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
209 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
210 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
|
211 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
212 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
213 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
214 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
215 return 2 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
216 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
217 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
218 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
219 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
|
220 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
221 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
222 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
223 class uint8(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
224 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
225 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
226 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
|
227 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
228 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
229 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
230 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
231 return 1 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
232 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
233 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
234 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
235 return chr(v & 0xff) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
236 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
237 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
238 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
239 class int32(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
240 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
241 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
242 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
|
243 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
244 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
245 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
246 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
247 return 4 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
248 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
249 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
250 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
251 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
|
252 chr((v >> 24) & 0xff) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
253 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
254 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
255 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
256 class int16(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
257 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
258 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
259 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
|
260 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
261 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
262 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
263 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
264 return 2 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
265 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
266 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
267 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
268 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
|
269 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
270 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
271 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
272 class uleb128(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
273 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
274 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
275 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
|
276 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
277 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
278 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
279 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
280 return _uleb128_sz(v) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
281 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
282 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
283 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
284 return _to_uleb128(v) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
285 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
286 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
287 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
288 class leb128(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
289 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
290 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
291 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
|
292 return v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
293 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
294 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
295 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
296 return _leb128_sz(v) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
297 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
298 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
299 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
300 return _to_leb128(v) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
301 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
302 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
303 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
304 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
|
305 bits = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
306 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
307 def __init__(self, bits): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
308 self.bits = bits |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
309 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
310 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
311 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
|
312 mask = (1 << self.bits) - 1 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
313 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
|
314 return padding_sz |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
315 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
316 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
317 def sizeof(v): |
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 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
321 def to_str(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
322 return '\x00' * v |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
323 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
324 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
325 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
326 def _get_sz(o): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
327 if isinstance(o, relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
328 return o.data_size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
329 return o.__class__.sizeof(o) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
330 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
331 |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
332 ## \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
|
333 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
334 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
|
335 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
|
336 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
|
337 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
|
338 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
|
339 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
340 ## \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
|
341 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
342 # 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
|
343 # elements. |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
344 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
345 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
|
346 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
|
347 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
|
348 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
|
349 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
350 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
|
351 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
|
352 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
|
353 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
354 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
|
355 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
|
356 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
|
357 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
358 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
|
359 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
|
360 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
|
361 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
362 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
363 ## \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
|
364 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
365 # 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
|
366 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
367 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
|
368 raise NotImplementedError, 'build_associations is not implemented' |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
369 pass |
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 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
372 ## \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
|
373 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
374 # 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
|
375 # sequence. |
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 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
|
378 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
|
379 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
|
380 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
|
381 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
|
382 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
|
383 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
384 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
385 ## \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
|
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 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
|
388 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
|
389 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
|
390 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
|
391 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
392 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
393 pass |
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 |
48
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
396 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
|
397 data_size = None |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
398 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
399 @staticmethod |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
400 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
|
401 pass |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
402 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
403 @staticmethod |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
404 def sizeof(v): |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
405 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
|
406 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
407 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
|
408 pass |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
409 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
410 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
|
411 pass |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
412 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
413 def children(self): |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
414 raise NotImplementedError, \ |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
415 '%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
|
416 pass |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
417 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
418 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
419 class null_relocatable(relocatable): |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
420 pass |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
421 |
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
422 |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
423 ## \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
|
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 # 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
|
426 # |
48
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
427 class ref(null_relocatable): |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
428 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
|
429 target = None |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
430 |
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, 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
|
432 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
|
433 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
|
434 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
435 @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
|
436 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
|
437 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
|
438 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
439 @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
|
440 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
|
441 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
|
442 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
443 @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
|
444 def compute_size(): |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
445 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
|
446 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
447 @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
|
448 def to_str(): |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
449 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
|
450 |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
451 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
|
452 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
|
453 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
|
454 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
455 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
456 ## \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
|
457 # |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
458 class value_ref(ref): |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
459 def get_value(self, parents): |
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
460 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
|
461 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
|
462 |
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
|
463 pparts = self.target_path.split('.') |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
464 clazz_name = pparts[0] |
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
465 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
|
466 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
467 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
|
468 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
|
469 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
470 for parent in rev_parents: |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
471 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
|
472 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
|
473 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
|
474 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
|
475 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
|
476 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
477 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
|
478 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
|
479 return value |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
480 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
481 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
482 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
483 class array(relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
484 count_name = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
485 child_type = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
486 items = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
487 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
488 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
|
489 super(array, self).__init__() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
490 self.count_name = count_name |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
491 self.child_type = child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
492 pass |
0 | 493 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
494 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
|
495 nitem = parent |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
496 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
|
497 nitem = getattr(nitem, name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
498 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
499 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
|
500 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
501 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
502 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
|
503 moff = man_off(off) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
504 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
505 obj = array(self.count_name, self.child_type) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
506 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
507 def parse(): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
508 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
|
509 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
|
510 moff(item_sz) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
511 return item |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
512 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
513 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
|
514 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
515 obj.items = items |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
516 obj.data_size = moff() - off |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
517 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
518 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
519 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
520 sizes = [compute_size(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
|
521 size = sum(sizes) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
522 self.data_size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
523 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
524 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
525 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
526 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
|
527 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
|
528 return ''.join(strs) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
529 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
530 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
531 return ('items',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
532 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
533 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
534 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
535 class composite(relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
536 child_names = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
537 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
538 def __init__(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
539 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
|
540 setattr(self, child_name, None) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
541 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
542 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
543 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
544 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
|
545 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
|
546 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
|
547 setattr(self, child_name, child) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
548 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
549 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
550 @classmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
551 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
|
552 moff = man_off(off) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
553 obj = clazz() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
554 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
555 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
|
556 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
|
557 child = getattr(obj, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
558 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
|
559 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
|
560 moff(child_sz) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
561 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
562 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
563 obj.data_size = moff() - off |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
564 return obj |
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 compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
567 children = [getattr(self, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
568 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
|
569 child_sizes = [compute_size(child) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
570 for child in children] |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
571 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
|
572 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
573 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
574 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
575 child_clazzs = [getattr(self.__class__, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
576 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
|
577 children = [getattr(self, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
578 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
|
579 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
|
580 child_clazz.to_str(child), |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
581 child_clazzs, children) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
582 return ''.join(child_strs) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
583 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
584 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
585 return self.child_names |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
586 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
587 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
588 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
589 class cond(relocatable): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
590 condition = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
591 child_type = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
592 value = None |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
593 is_true = None |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
594 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
595 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
|
596 self.condition = cond |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
597 self.child_type = child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
598 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
599 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
600 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
|
601 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
|
602 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
|
603 is_true = True |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
604 else: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
605 value = None |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
606 is_true = False |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
607 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
608 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
609 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
|
610 obj.value = value |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
611 obj.data_size = self.sizeof(obj) |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
612 obj.is_true = is_true |
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
613 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
614 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
615 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
616 def sizeof(self, v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
617 if v.value is None: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
618 return 0 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
619 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
|
620 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
621 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
622 if isinstance(self.value, relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
623 self.value.compute_size() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
624 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
625 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
626 self.data_size = self.sizeof(self.value) |
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 to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
630 if self.value is None: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
631 return '' |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
632 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
633 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
|
634 return data |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
635 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
636 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
637 return ('value',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
638 pass |
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 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
641 class switch(relocatable): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
642 selector = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
643 map = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
644 child_type = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
645 value = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
646 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
647 _parent = None |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
648 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
649 def __init__(self, selector, map): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
650 self.selector = selector |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
651 self.map = map |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
652 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
653 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
654 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
|
655 selector = self.selector |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
656 sel_value = parent |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
657 for name in selector.split('.'): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
658 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
|
659 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
660 return sel_value |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
661 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
662 def _get_child_type(self, parent): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
663 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
|
664 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
665 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
|
666 return child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
667 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
668 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
|
669 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
|
670 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
|
671 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
672 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
|
673 obj.value = value |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
674 obj.child_type = child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
675 obj.data_size = self.sizeof(obj) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
676 obj._parent = parent |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
677 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
678 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
679 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
680 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
681 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
|
682 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
683 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
684 if isinstance(self.value, relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
685 self.value.compute_size() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
686 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
687 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
688 self.data_size = self.sizeof(self.value) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
689 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
690 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
691 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
692 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
|
693 return data |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
694 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
695 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
696 key = self.switch_key(self._parent) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
697 return (repr(key),) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
698 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
699 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
700 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
701 class abs_value(relocatable): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
702 value = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
703 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
704 def __init__(self, value): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
705 self.value = value |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
706 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
707 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
708 def parse(self, parse, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
709 obj = abs_value(self.value) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
710 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
711 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
712 def sizeof(self, v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
713 return 0 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
714 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
715 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
716 return '' |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
717 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
718 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
719 return ('value',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
720 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
721 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
722 |
48
3936d223989a
Introduce null_relocatable for any relocatable without real instance
Thinker K.F. Li <thinker@codemud.net>
parents:
45
diff
changeset
|
723 class depend(null_relocatable): |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
724 depend_on = None |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
725 child_type = None |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
726 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
727 def __init__(self, depend_on): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
728 self.depend_on = depend_on |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
729 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
730 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
731 def __call__(self, child_type): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
732 self.child_type = child_type |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
733 return self |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
734 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
735 def parse(self, parent, data, off): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
736 v = self.child_type.parse(parent, data, off) |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
737 return v |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
738 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
739 def sizeof(self, v): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
740 v = self.child_type.sizeof(v) |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
741 return v |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
742 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
743 def compute_size(self, child): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
744 if issubclass(self.child_type, relocatable): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
745 self.child_type.compute_size(child) |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
746 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
747 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
748 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
749 def to_str(self, child): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
750 return self.child_type.to_str(child) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
751 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
752 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
753 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
754 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
|
755 if isinstance(parent, (list, dict)): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
756 key = eval(name) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
757 parent[key] = obj |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
758 return |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
759 setattr(parent, name, obj) |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
760 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
761 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
762 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
763 class depend_off(depend): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
764 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
765 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
766 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
767 class depend_off_rel(depend): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
768 relative_to = None |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
769 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
770 def __init__(self, relative_to, depend_on): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
771 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
|
772 self.relative_to = relative_to |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
773 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
774 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
775 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
776 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
777 class depend_idx(depend): |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
778 pass |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
779 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
780 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
781 class _DEX_header(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
782 magic = rawstr(8) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
783 checksum = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
784 signature = rawstr(20) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
785 fileSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
786 headerSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
787 endianTag = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
788 linkSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
789 linkOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
790 mapOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
791 stringIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
792 stringIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
793 typeIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
794 typeIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
795 protoIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
796 protoIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
797 fieldIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
798 fieldIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
799 methodIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
800 methodIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
801 classDefsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
802 classDefsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
803 dataSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
804 dataOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
805 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
806 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
807 '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
|
808 '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
|
809 'typeIdsOff protoIdsSize protoIdsOff fieldIdsSize fieldIdsOff ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
810 'methodIdsSize methodIdsOff classDefsSize classDefsOff ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
811 'dataSize dataOff'.split() |
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 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
815 class _DEX_MapItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
816 type = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
817 unused = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
818 size = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
819 offset = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
820 |
2 | 821 types = { |
822 0x0000: 'kDexTypeHeaderItem', | |
823 0x0001: 'kDexTypeStringIdItem', | |
824 0x0002: 'kDexTypeTypeIdItem', | |
825 0x0003: 'kDexTypeProtoIdItem', | |
826 0x0004: 'kDexTypeFieldIdItem', | |
827 0x0005: 'kDexTypeMethodIdItem', | |
828 0x0006: 'kDexTypeClassDefItem', | |
829 0x1000: 'kDexTypeMapList', | |
830 0x1001: 'kDexTypeTypeList', | |
831 0x1002: 'kDexTypeAnnotationSetRefList', | |
832 0x1003: 'kDexTypeAnnotationSetItem', | |
833 0x2000: 'kDexTypeClassDataItem', | |
834 0x2001: 'kDexTypeCodeItem', | |
835 0x2002: 'kDexTypeStringDataItem', | |
836 0x2003: 'kDexTypeDebugInfoItem', | |
837 0x2004: 'kDexTypeAnnotationItem', | |
838 0x2005: 'kDexTypeEncodedArrayItem', | |
839 0x2006: 'kDexTypeAnnotationsDirectoryItem' | |
840 } | |
0 | 841 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
842 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
843 'type unused size offset'.split() |
0 | 844 pass |
845 | |
846 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
847 class _DEX_MapItemBlock(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
848 num = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
849 items = array('num', _DEX_MapItem) |
0 | 850 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
851 child_names = 'num items'.split() |
0 | 852 pass |
853 | |
854 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
855 class _DEX_StringId(composite): |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
856 stringDataOff = depend_off('_DEX_StringDataItem')(uint32) |
0 | 857 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
858 child_names = ('stringDataOff',) |
0 | 859 pass |
860 | |
861 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
862 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
|
863 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
|
864 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
865 child_names = ('descriptorIdx',) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
866 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
867 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
868 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
869 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
|
870 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
|
871 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
|
872 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
|
873 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
|
874 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
|
875 (value_ref('_DEX_ProtoId.parametersOff'))) |
0 | 876 |
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
|
877 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
|
878 'parametersOffRef'.split() |
0 | 879 pass |
880 | |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
881 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
882 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
|
883 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
|
884 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
|
885 nameIdx = depend_idx('DEXFile.stringIds')(uint32) |
0 | 886 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
887 child_names = 'classIdx typeIdx nameIdx'.split() |
0 | 888 pass |
889 | |
890 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
891 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
|
892 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
|
893 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
|
894 nameIdx = depend_idx('DEXFile.stringIds')(uint32) |
2 | 895 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
896 child_names = 'classIdx protoIdx nameIdx'.split() |
2 | 897 pass |
898 | |
899 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
900 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
|
901 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
|
902 accessFlags = uint32 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
903 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
|
904 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
|
905 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
|
906 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
|
907 (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
|
908 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
|
909 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
|
910 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
|
911 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
|
912 (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
|
913 classDataOff = 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
|
914 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
|
915 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
|
916 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
|
917 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
|
918 (value_ref('_DEX_ClassDef.staticValuesOff'))) |
2 | 919 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
920 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
|
921 '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
|
922 'sourceFileIdx annotationsOff annotationsOffRef ' \ |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
923 'classDataOff staticValuesOff staticValuesOffRef'.split() |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
924 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
925 |
2 | 926 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
927 class _DEX_ClassDataHeader(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
928 staticFieldsSize = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
929 instanceFieldsSize = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
930 directMethodsSize = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
931 virtualMethodsSize = uleb128 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
932 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
933 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
934 'staticFieldsSize instanceFieldsSize directMethodsSize ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
935 'virtualMethodsSize'.split() |
2 | 936 pass |
937 | |
938 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
939 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
|
940 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
|
941 accessFlags = uleb128 |
2 | 942 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
943 child_names = 'fieldIdx accessFlags'.split() |
2 | 944 pass |
945 | |
946 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
947 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
|
948 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
|
949 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
|
950 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
|
951 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
|
952 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
|
953 (value_ref('_DEX_Method.codeOff'))) |
2 | 954 |
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
|
955 child_names = 'methodIdx accessFlags codeOff codeOffRef'.split() |
2 | 956 pass |
957 | |
958 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
959 class _DEX_ClassData(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
960 header = _DEX_ClassDataHeader |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
961 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
|
962 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
|
963 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
|
964 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
|
965 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
966 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
967 'header ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
968 '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
|
969 pass |
917f0a9b9d06
Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents:
5
diff
changeset
|
970 |
917f0a9b9d06
Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents:
5
diff
changeset
|
971 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
972 class _DEX_TypeList(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
973 num = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
974 typeItems = array('num', uint16) |
6
917f0a9b9d06
Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents:
5
diff
changeset
|
975 |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
976 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
|
977 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
978 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
979 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
980 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
|
981 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
|
982 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
|
983 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
984 child_names = 'padding value'.split() |
2 | 985 pass |
986 | |
987 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
988 class _DEX_Try(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
989 startAddr = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
990 insnCount = uint16 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
991 handlerOff = depend_off_rel('_DEX_Code.handlers_size', |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
992 '_DEX_Try.catch_ref.target')(uint16) |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
993 catch_ref = ref('_DEX_Catch') |
2 | 994 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
995 child_names = 'startAddr insnCount handlerOff'.split() |
2 | 996 pass |
997 | |
998 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
999 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
|
1000 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
|
1001 address = uleb128 |
2 | 1002 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1003 child_names = 'typeIdx address'.split() |
2 | 1004 pass |
1005 | |
1006 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1007 class _DEX_CatchAllHandler(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1008 address = uleb128 |
2 | 1009 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1010 child_names = 'address'.split() |
2 | 1011 pass |
1012 | |
1013 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1014 class _DEX_Catch(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1015 size = leb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1016 handlers = array('count', _DEX_CatchHandler) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1017 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
|
1018 _DEX_CatchAllHandler) |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
1019 try_ref = ref('_DEX_Try') |
2 | 1020 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1021 child_names = 'size handlers catchAllHandler'.split() |
2 | 1022 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1023 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1024 def catchesAll(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1025 return self.size <= 0 |
2 | 1026 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1027 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1028 def count(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1029 if self.size < 0: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1030 return -self.size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1031 return self.size |
2 | 1032 pass |
1033 | |
1034 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1035 class _DEX_Code(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1036 registersSize = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1037 insSize = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1038 outsSize = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1039 triesSize = uint16 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
1040 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
|
1041 insnsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1042 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
|
1043 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1044 _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
|
1045 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1046 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
|
1047 try_items = cond(_has_tries, |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1048 array('triesSize', _DEX_Try)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1049 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1050 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
|
1051 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
|
1052 array('handlers_size.value', _DEX_Catch)) |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
1053 try_catch_asso = one2one('try_items.value.items', 'catch_ref', |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
1054 'catch_handler_items.value.items', 'try_ref') |
2 | 1055 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1056 padding2 = auto_align(2) |
2 | 1057 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1058 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1059 'registersSize insSize outsSize triesSize debugInfoOff ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1060 'insnsSize insns padding try_items handlers_size ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1061 'catch_handler_items padding2'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1062 pass |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1063 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1064 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1065 class _DEX_AnnotationSetItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1066 size = uint32 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
1067 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
|
1068 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1069 child_names = 'size annotationOffs'.split() |
2 | 1070 pass |
1071 | |
1072 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1073 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
|
1074 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
|
1075 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
|
1076 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
|
1077 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
|
1078 (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
|
1079 'annotationsOff'))) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1080 |
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
|
1081 child_names = 'fieldIdx annotationsOff annotationsOffRef'.split() |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1082 pass |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1083 |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1084 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1085 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
|
1086 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
|
1087 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
|
1088 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
|
1089 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
|
1090 (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
|
1091 'annotationsOff'))) |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1092 |
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
|
1093 child_names = 'methodIdx annotationsOff annotationsOffRef'.split() |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1094 pass |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1095 |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1096 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1097 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
|
1098 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
|
1099 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
|
1100 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
|
1101 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
|
1102 (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
|
1103 'annotationsOff'))) |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1104 |
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
|
1105 child_names = 'methodIdx annotationsOff annotationsOffRef'.split() |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1106 pass |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1107 |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1108 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1109 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
|
1110 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
|
1111 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
|
1112 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
|
1113 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
|
1114 (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
|
1115 'classAnnotationsOff'))) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1116 fieldsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1117 methodsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1118 parametersSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1119 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1120 fieldAnnotationsItems = array('fieldsSize', _DEX_FieldAnnotationsItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1121 methodAnnotationsItems = array('methodsSize', _DEX_MethodAnnotationsItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1122 parameterAnnotationsItems = array('parametersSize', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1123 _DEX_ParameterAnnotationsItem) |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1124 |
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
|
1125 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
|
1126 'fieldsSize methodsSize ' \ |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1127 'parametersSize fieldAnnotationsItems methodAnnotationsItems ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1128 'parameterAnnotationsItems'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1129 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1130 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1131 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1132 class _DEX_AnnotationArray(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1133 size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1134 # 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
|
1135 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1136 child_names = 'size annotations'.split() |
3
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1137 pass |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1138 |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1139 |
8 | 1140 ## |
1141 # | |
1142 # \see createAnnotationMember() in dalvik/vm/reflect/Annotation.c | |
1143 # | |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1144 class _DEX_AnnotationMember_noname(composite): |
8 | 1145 # |
1146 # Constants from DexFile.h | |
1147 # | |
1148 kDexAnnotationByte = 0x00 | |
1149 kDexAnnotationShort = 0x02 | |
1150 kDexAnnotationChar = 0x03 | |
1151 kDexAnnotationInt = 0x04 | |
1152 kDexAnnotationLong = 0x06 | |
1153 kDexAnnotationFloat = 0x10 | |
1154 kDexAnnotationDouble = 0x11 | |
1155 kDexAnnotationString = 0x17 | |
1156 kDexAnnotationType = 0x18 | |
1157 kDexAnnotationField = 0x19 | |
1158 kDexAnnotationMethod = 0x1a | |
1159 kDexAnnotationEnum = 0x1b | |
1160 kDexAnnotationArray = 0x1c | |
1161 kDexAnnotationAnnotation = 0x1d | |
1162 kDexAnnotationNull = 0x1e | |
1163 kDexAnnotationBoolean = 0x1f | |
1164 | |
1165 kDexAnnotationValueTypeMask = 0x1f | |
1166 kDexAnnotationValueArgShift = 5 | |
1167 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1168 valueType = uint8 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1169 value_map = { |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1170 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
|
1171 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
|
1172 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
|
1173 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
|
1174 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
|
1175 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
|
1176 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
|
1177 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
|
1178 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
|
1179 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
|
1180 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
|
1181 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
|
1182 kDexAnnotationNull: abs_value(0), |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1183 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
|
1184 kDexAnnotationArray: _DEX_AnnotationArray, |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1185 # kDexAnnotationAnnotation: _DEX_AnnotationItem_novisibility |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1186 } |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1187 value = switch('vtype', value_map) |
8 | 1188 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1189 child_names = 'valueType value'.split() |
8 | 1190 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1191 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1192 def vtype(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1193 vtype = self.valueType & self.kDexAnnotationValueTypeMask |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1194 return vtype |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1195 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1196 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1197 def width(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1198 width = self.valueType >> self.kDexAnnotationValueArgShift |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1199 return width |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1200 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1201 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1202 def value_width(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1203 width = self.valueType >> self.kDexAnnotationValueArgShift |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1204 return width + 1 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1205 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1206 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1207 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1208 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
|
1209 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
|
1210 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1211 child_names = 'nameIdx valueType value'.split() |
8 | 1212 pass |
1213 | |
1214 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1215 _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
|
1216 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1217 |
8 | 1218 ## \brief Annotation item |
1219 # | |
1220 # \see processEncodedAnnotation() in dalvik/vm/reflect/Annotation.c | |
1221 # | |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1222 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
|
1223 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
|
1224 size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1225 members = array('size', _DEX_AnnotationMember) |
8 | 1226 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1227 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
|
1228 |
8 | 1229 kDexVisibilityBuild = 0x00 |
1230 kDexVisibilityRuntime = 0x01 | |
1231 kDexVisibilitySystem = 0x02 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1232 pass |
8 | 1233 |
1234 | |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1235 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
|
1236 visibility = uint8 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1237 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1238 child_names = 'visibility typeIdx size members'.split() |
8 | 1239 pass |
1240 | |
1241 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1242 _DEX_AnnotationMember. \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1243 value_map[_DEX_AnnotationMember.kDexAnnotationAnnotation] = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1244 _DEX_AnnotationItem_novisibility |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1245 |
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1246 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1247 class _DEX_EncodedArrayItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1248 size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1249 elements = array('size', _DEX_AnnotationMember_noname) |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1250 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1251 child_names = 'size elements'.split() |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1252 pass |
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1253 |
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1254 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1255 class _DEX_DebugCodeBlock(relocatable): |
11 | 1256 DBG_END_SEQUENCE = 0x00 |
1257 DBG_ADVANCE_PC = 0x01 | |
1258 DBG_ADVANCE_LINE = 0x02 | |
1259 DBG_START_LOCAL = 0x03 | |
1260 DBG_START_LOCAL_EXTENDED = 0x04 | |
1261 DBG_END_LOCAL = 0x05 | |
1262 DBG_RESTART_LOCAL = 0x06 | |
1263 DBG_SET_PROLOGUE_END = 0x07 | |
1264 DBG_SET_EPILOGUE_BEGIN = 0x08 | |
1265 DBG_SET_FILE = 0x09 | |
1266 DBG_FIRST_SPECIAL = 0x0a | |
1267 DBG_LINE_BASE = -4 | |
1268 DBG_LINE_RANGE = 15 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1269 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1270 opcodes = None |
11 | 1271 data_size = None |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1272 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1273 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1274 def parse(parent, data, off): |
11 | 1275 moff = man_off(off) |
1276 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1277 self = _DEX_DebugCodeBlock() |
11 | 1278 |
1279 # | |
1280 # Parse debug opcodes | |
1281 # | |
1282 opcodes = [] | |
1283 while True: | |
1284 opcode = _to_uint(data[moff(1):moff()]) | |
1285 | |
1286 if opcode == self.DBG_END_SEQUENCE: | |
1287 opcodes.append((opcode,)) | |
1288 break | |
1289 elif opcode == self.DBG_ADVANCE_PC: | |
1290 adv, sh = _uleb128(data[moff():moff() + 5]) | |
1291 moff(sh) | |
1292 opcodes.append((opcode, adv)) | |
1293 pass | |
1294 elif opcode == self.DBG_ADVANCE_LINE: | |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1295 adv, sh = _leb128(data[moff():moff() + 5]) |
11 | 1296 moff(sh) |
1297 opcodes.append((opcode, adv)) | |
1298 pass | |
1299 elif opcode in (self.DBG_START_LOCAL, | |
1300 self.DBG_START_LOCAL_EXTENDED): | |
1301 reg, sh = _uleb128(data[moff():moff() + 5]) | |
1302 moff(sh) | |
1303 name, sh = _uleb128(data[moff():moff() + 5]) | |
1304 moff(sh) | |
1305 descriptor, sh = _uleb128(data[moff():moff() + 5]) | |
1306 moff(sh) | |
1307 if opcode == self.DBG_START_LOCAL_EXTENDED: | |
1308 signature, sh = _uleb128(data[moff():moff() + 5]) | |
1309 moff(sh) | |
1310 opcodes.append((opcode, reg, name, descriptor, signature)) | |
1311 else: | |
1312 opcodes.append((opcode, reg, name, descriptor)) | |
1313 pass | |
1314 pass | |
1315 elif opcode == self.DBG_END_LOCAL: | |
1316 reg, sh = _uleb128(data[moff():moff() + 5]) | |
1317 moff(sh) | |
1318 opcodes.append((opcode, reg)) | |
1319 pass | |
1320 elif opcode == self.DBG_RESTART_LOCAL: | |
1321 reg, sh = _uleb128(data[moff():moff() + 5]) | |
1322 moff(sh) | |
1323 opcodes.append((opcode, reg)) | |
1324 pass | |
1325 elif opcode in (self.DBG_SET_PROLOGUE_END, | |
1326 self.DBG_SET_EPILOGUE_BEGIN, | |
1327 self.DBG_SET_FILE): | |
1328 opcodes.append((opcode,)) | |
1329 pass | |
1330 else: | |
1331 opcodes.append((opcode,)) | |
1332 pass | |
1333 pass | |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1334 self.opcodes = tuple(opcodes) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1335 |
11 | 1336 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
|
1337 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1338 return self |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1339 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1340 def compute_size(self): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1341 def compute_opcode_size(code): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1342 opcode = code[0] |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1343 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1344 if opcode == self.DBG_END_SEQUENCE: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1345 size = 1 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1346 elif opcode == self.DBG_ADVANCE_PC: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1347 size = 1 + _uleb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1348 elif opcode == self.DBG_ADVANCE_LINE: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1349 size = 1 + _leb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1350 elif opcode in (self.DBG_START_LOCAL, |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1351 self.DBG_START_LOCAL_EXTENDED): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1352 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
|
1353 _uleb128_sz(code[3]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1354 if len(code) == 5: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1355 size = size + _uleb128_sz(code[4]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1356 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1357 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1358 elif opcode == self.DBG_END_LOCAL: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1359 size = 1 + _uleb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1360 elif opcode == self.DBG_RESTART_LOCAL: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1361 size = 1 + _uleb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1362 elif opcode in (self.DBG_SET_PROLOGUE_END, |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1363 self.DBG_SET_EPILOGUE_BEGIN, |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1364 self.DBG_SET_FILE): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1365 size = 1 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1366 else: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1367 size = 1 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1368 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1369 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1370 return size |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1371 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1372 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
|
1373 opcode_sizes = [i for i in opcode_sizes] |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1374 opcodes_size = sum(opcode_sizes) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1375 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1376 self.data_size = opcodes_size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1377 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1378 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1379 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1380 # |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1381 # Parse debug opcodes |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1382 # |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1383 opcodes = self.opcodes |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1384 opcodebins = [] |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1385 for code in opcodes: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1386 opcode = code[0] |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1387 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1388 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
|
1389 opcodebins.append(chr(opcode)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1390 break |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1391 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
|
1392 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
|
1393 opcodebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1394 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1395 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
|
1396 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
|
1397 opcodebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1398 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1399 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
|
1400 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
|
1401 _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
|
1402 codebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1403 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1404 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
|
1405 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
|
1406 _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
|
1407 _to_uleb128(code[4]) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1408 codebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1409 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1410 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
|
1411 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
|
1412 codebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1413 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1414 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
|
1415 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
|
1416 codebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1417 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1418 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
|
1419 self.DBG_SET_EPILOGUE_BEGIN, |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1420 self.DBG_SET_FILE): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1421 opcodebins.append(chr(opcode)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1422 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1423 else: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1424 opcodebins.append(chr(opcode)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1425 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1426 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1427 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1428 return ''.join(opcodebins) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1429 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1430 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1431 return ('opcodes',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1432 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1433 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1434 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1435 class _DEX_DebugInfoItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1436 start_line = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1437 parameters_size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1438 parameters = array('parameters_size', uleb128) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1439 opcodes = _DEX_DebugCodeBlock |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1440 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1441 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
|
1442 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1443 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1444 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1445 class _DEX_StringDataItem(composite): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1446 size = uleb128 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1447 data = rawstr_size_name('size') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1448 padding = rawstr(1) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1449 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1450 child_names = 'size data padding'.split() |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1451 pass |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1452 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1453 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
1454 class dummy(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1455 data_size = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1456 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1457 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1458 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1459 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
|
1460 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
|
1461 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1462 self = _DEX_StringDataItem() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1463 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1464 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1465 self.data = data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1466 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
|
1467 return self |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1468 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1469 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1470 size = len(self.data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1471 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1472 size_sz = _uleb128_sz(size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1473 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
|
1474 pass |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1475 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1476 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1477 size = len(self.data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1478 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1479 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
|
1480 return data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1481 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1482 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1483 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1484 class DEXFile(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1485 fname = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1486 data = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1487 header = _DEX_header |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1488 maps = _DEX_MapItemBlock |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1489 stringIds = array(None, _DEX_StringId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1490 typeIds = array(None, _DEX_TypeId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1491 protoIds = array(None, _DEX_ProtoId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1492 fieldIds = array(None, _DEX_FieldId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1493 methodIds = array(None, _DEX_MethodId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1494 classDefs = array(None, _DEX_ClassDef) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1495 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
|
1496 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
|
1497 codeItems = array(None, _DEX_Code) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1498 annotationSetItems = array(None, _DEX_AnnotationSetItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1499 annotationsDirectoryItems = array(None, _DEX_AnnotationsDirectoryItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1500 annotationItems = array(None, _DEX_AnnotationItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1501 encodedArrayItems = array(None, _DEX_EncodedArrayItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1502 debugInfoItems = array(None, _DEX_DebugInfoItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1503 stringDataItems = array(None, _DEX_StringDataItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1504 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1505 child_names = 'header'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1506 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1507 block_defs = { |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1508 # 0x0000: 'kDexTypeHeaderItem', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1509 0x0001: 'stringIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1510 0x0002: 'typeIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1511 0x0003: 'protoIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1512 0x0004: 'fieldIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1513 0x0005: 'methodIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1514 0x0006: 'classDefs', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1515 # 0x1000: 'kDexTypeMapList', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1516 0x1001: 'typeLists', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1517 # 0x1002: 'kDexTypeAnnotationSetRefList', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1518 0x1003: 'annotationSetItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1519 0x2000: 'classDatas', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1520 0x2001: 'codeItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1521 0x2002: 'stringDataItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1522 0x2003: 'debugInfoItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1523 0x2004: 'annotationItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1524 0x2005: 'encodedArrayItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1525 0x2006: 'annotationsDirectoryItems' |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1526 } |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1527 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1528 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1529 def open(fname): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1530 fo = file(fname, 'r') |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1531 data = fo.read() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1532 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1533 dex = DEXFile.parse(data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1534 dex.fname = fname |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1535 return dex |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1536 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1537 @classmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1538 def parse(clazz, data): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1539 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
|
1540 obj.data = data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1541 obj._parse(data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1542 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1543 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1544 def _parse_maps(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1545 data = self.data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1546 header = self.header |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1547 off = header.mapOff |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1548 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
|
1549 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1550 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1551 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
|
1552 if block_map.type not in self.block_defs: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1553 return |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1554 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1555 data = self.data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1556 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1557 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
|
1558 off = block_map.offset |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1559 num = block_map.size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1560 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1561 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
|
1562 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
|
1563 setattr(self, child_name, blk) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1564 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1565 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1566 def _parse_blocks(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1567 data = self.data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1568 maps = self.maps.items.items |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1569 for map in maps: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1570 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
|
1571 self._parse_block(map) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1572 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1573 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1574 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1575 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1576 def _parse(self, data): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1577 self._parse_maps() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1578 self._parse_blocks() |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1579 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1580 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1581 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1582 return 'header stringIds typeIds protoIds fieldIds methodIds ' \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1583 'classDefs typeLists annotationSetItems classDatas codeItems ' \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1584 'stringDataItems debugInfoItems annotationItems ' \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1585 'encodedArrayItems annotationsDirectoryItems'.split() |
11 | 1586 pass |
1587 | |
1588 | |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1589 if __name__ == '__main__': |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1590 dex = DEXFile.open('data/testdata1.dex') |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1591 |
2 | 1592 print 'Header' |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1593 h = dex.header |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1594 for attr in h.child_names: |
2 | 1595 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
|
1596 pass |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1597 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1598 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1599 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
|
1600 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1601 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1602 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
|
1603 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1604 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1605 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
|
1606 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1607 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1608 print 'Size of fieldIds is %d bytes' % (dex.fieldIds.data_size) |
2 | 1609 |
1610 print | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1611 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
|
1612 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1613 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1614 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
|
1615 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1616 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1617 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
|
1618 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1619 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1620 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
|
1621 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1622 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1623 print 'Size of codeItems is %d bytes' % (dex.codeItems.data_size) |
2 | 1624 |
1625 print | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1626 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
|
1627 (dex.annotationSetItems.data_size) |
2 | 1628 |
1629 print | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1630 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
|
1631 (dex.annotationsDirectoryItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1632 |
3
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1633 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1634 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
|
1635 (dex.annotationItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1636 |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1637 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1638 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
|
1639 (dex.encodedArrayItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1640 |
8 | 1641 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1642 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
|
1643 (dex.debugInfoItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1644 |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1645 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1646 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
|
1647 (dex.stringDataItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1648 |
2 | 1649 print |
1650 print 'Data maps' | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1651 maps = dex.maps.items.items |
2 | 1652 for map in maps: |
1653 print '\t0x%04x(%s) size=%d offset=0x%08x' % (map.type, | |
1654 map.types[map.type], | |
1655 map.size, | |
1656 map.offset) | |
18
f36b14d1f122
collect dependencies for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
17
diff
changeset
|
1657 pass |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1658 pass |