Mercurial > paraspace
annotate paraspace/dexfile.py @ 43:5cea19126a11
Fix issue of _build_refs()
- _build_refs() does not handle dexfile.cond well when traveling.
- fix it
- Move from ref.get_value() to ref.set_value().
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sun, 19 Jun 2011 19:36:36 +0800 |
parents | c5cfc796af8b |
children | 71218ba3bc8a |
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 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
396 ## \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
|
397 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
398 # 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
|
399 # |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
400 class ref(_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
|
401 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
|
402 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
|
403 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
404 def __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
|
405 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
|
406 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
|
407 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
408 @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
|
409 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
|
410 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
|
411 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
412 @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
|
413 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
|
414 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
|
415 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
416 @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
|
417 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
|
418 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
|
419 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
420 @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
|
421 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
|
422 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
|
423 |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
424 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
|
425 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
|
426 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
|
427 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
428 |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
429 ## \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
|
430 # |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
431 class value_ref(ref): |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
432 def get_value(self, parents): |
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
433 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
|
434 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
|
435 |
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
|
436 pparts = self.target_path.split('.') |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
437 clazz_name = pparts[0] |
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
438 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
|
439 |
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 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
|
441 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
|
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 for parent in rev_parents: |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 |
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 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
|
451 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
|
452 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
|
453 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
454 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
455 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
456 class relocatable(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
457 data_size = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
458 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
459 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
460 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
461 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
462 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
463 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
464 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
465 return v.data_size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
466 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
467 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
468 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
469 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
470 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
471 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
472 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
473 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
474 raise NotImplementedError, \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
475 '%s: does not implement children' % (self.__class__.__name__) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
476 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
477 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
478 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
479 class array(relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
480 count_name = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
481 child_type = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
482 items = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
483 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
484 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
|
485 super(array, self).__init__() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
486 self.count_name = count_name |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
487 self.child_type = child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
488 pass |
0 | 489 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
490 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
|
491 nitem = parent |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
492 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
|
493 nitem = getattr(nitem, name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
494 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
495 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
|
496 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
497 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
498 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
|
499 moff = man_off(off) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
500 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
501 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
|
502 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
503 def parse(): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
504 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
|
505 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
|
506 moff(item_sz) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
507 return item |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
508 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
509 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
|
510 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
511 obj.items = items |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
512 obj.data_size = moff() - off |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
513 return obj |
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 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
516 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
|
517 size = sum(sizes) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
518 self.data_size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
519 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
520 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
521 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
522 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
|
523 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
|
524 return ''.join(strs) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
525 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
526 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
527 return ('items',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
528 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
529 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
530 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
531 class composite(relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
532 child_names = None |
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 def __init__(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
535 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
|
536 setattr(self, child_name, None) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
537 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
538 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
539 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
540 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
|
541 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
|
542 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
|
543 setattr(self, child_name, child) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
544 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
545 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
546 @classmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
547 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
|
548 moff = man_off(off) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
549 obj = clazz() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
550 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
551 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
|
552 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
|
553 child = getattr(obj, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
554 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
|
555 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
|
556 moff(child_sz) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
557 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
558 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
559 obj.data_size = moff() - off |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
560 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
561 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
562 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
563 children = [getattr(self, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
564 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
|
565 child_sizes = [compute_size(child) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
566 for child in children] |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
567 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
|
568 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
569 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
570 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
571 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
|
572 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
|
573 children = [getattr(self, child_name) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
574 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
|
575 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
|
576 child_clazz.to_str(child), |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
577 child_clazzs, children) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
578 return ''.join(child_strs) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
579 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
580 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
581 return self.child_names |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
582 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
583 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
584 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
585 class cond(relocatable): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
586 condition = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
587 child_type = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
588 value = None |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
589 is_true = None |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
590 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
591 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
|
592 self.condition = cond |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
593 self.child_type = child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
594 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
595 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
596 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
|
597 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
|
598 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
|
599 is_true = True |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
600 else: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
601 value = None |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
602 is_true = False |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
603 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
604 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
605 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
|
606 obj.value = value |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
607 obj.data_size = self.sizeof(obj) |
43
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
608 obj.is_true = is_true |
5cea19126a11
Fix issue of _build_refs()
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
609 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
610 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
611 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
612 def sizeof(self, v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
613 if v.value is None: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
614 return 0 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
615 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
|
616 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
617 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
618 if isinstance(self.value, relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
619 self.value.compute_size() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
620 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
621 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
622 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
|
623 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
624 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
625 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
626 if self.value is None: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
627 return '' |
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 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
|
630 return data |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
631 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
632 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
633 return ('value',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
634 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
635 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
636 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
637 class switch(relocatable): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
638 selector = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
639 map = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
640 child_type = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
641 value = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
642 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
643 _parent = None |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
644 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
645 def __init__(self, selector, map): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
646 self.selector = selector |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
647 self.map = map |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
648 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
649 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
650 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
|
651 selector = self.selector |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
652 sel_value = parent |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
653 for name in selector.split('.'): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
654 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
|
655 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
656 return sel_value |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
657 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
658 def _get_child_type(self, parent): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
659 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
|
660 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
661 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
|
662 return child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
663 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
664 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
|
665 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
|
666 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
|
667 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
668 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
|
669 obj.value = value |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
670 obj.child_type = child_type |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
671 obj.data_size = self.sizeof(obj) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
672 obj._parent = parent |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
673 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
674 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
675 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
676 def sizeof(v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
677 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
|
678 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
679 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
680 if isinstance(self.value, relocatable): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
681 self.value.compute_size() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
682 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
683 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
684 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
|
685 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
686 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
687 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
688 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
|
689 return data |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
690 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
691 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
692 key = self.switch_key(self._parent) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
693 return (repr(key),) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
694 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
695 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
696 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
697 class abs_value(relocatable): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
698 value = None |
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 def __init__(self, value): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
701 self.value = value |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
702 pass |
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 parse(self, parse, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
705 obj = abs_value(self.value) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
706 return obj |
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 sizeof(self, v): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
709 return 0 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
710 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
711 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
712 return '' |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
713 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
714 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
715 return ('value',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
716 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
717 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
718 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
719 class depend(relocatable): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
720 depend_on = None |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
721 child_type = None |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
722 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
723 def __init__(self, depend_on): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
724 self.depend_on = depend_on |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
725 pass |
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 __call__(self, child_type): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
728 self.child_type = child_type |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
729 return self |
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 parse(self, parent, data, off): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
732 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
|
733 return v |
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 sizeof(self, v): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
736 v = self.child_type.sizeof(v) |
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 compute_size(self, child): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
740 if issubclass(self.child_type, relocatable): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
741 self.child_type.compute_size(child) |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
742 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
743 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
744 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
745 def to_str(self, child): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
746 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
|
747 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
748 def link(self, child, name_path, parents, markers_info): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
749 raise NotImplementedError, 'does not support link() method' |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
750 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
751 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
752 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
753 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
|
754 if isinstance(parent, (list, dict)): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
755 key = eval(name) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
756 parent[key] = obj |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
757 return |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
758 setattr(parent, name, obj) |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
759 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
760 |
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 class depend_off(depend): |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
763 def link(self, child, name_path, parents, markers_info): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
764 parent = parents[-1] |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
765 name = name_path.split('.')[-1] |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
766 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
767 dep_on_name_path = self.depend_on |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
768 id_item_map = markers_info[dep_on_name_path] |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
769 dep_on = id_item_map[child.data_offset] |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
770 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
771 _set_name_path_name(parent, name, dep_on) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
772 pass |
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 |
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 class depend_off_rel(depend): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
777 relative_to = None |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
778 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
779 def __init__(self, relative_to, depend_on): |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
780 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
|
781 self.relative_to = relative_to |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
782 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
783 pass |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
784 |
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
785 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
786 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
|
787 pass |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
788 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
789 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
790 class _DEX_header(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
791 magic = rawstr(8) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
792 checksum = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
793 signature = rawstr(20) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
794 fileSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
795 headerSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
796 endianTag = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
797 linkSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
798 linkOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
799 mapOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
800 stringIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
801 stringIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
802 typeIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
803 typeIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
804 protoIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
805 protoIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
806 fieldIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
807 fieldIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
808 methodIdsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
809 methodIdsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
810 classDefsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
811 classDefsOff = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
812 dataSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
813 dataOff = uint32 |
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 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
816 '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
|
817 '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
|
818 'typeIdsOff protoIdsSize protoIdsOff fieldIdsSize fieldIdsOff ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
819 'methodIdsSize methodIdsOff classDefsSize classDefsOff ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
820 'dataSize dataOff'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
821 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
822 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
823 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
824 class _DEX_MapItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
825 type = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
826 unused = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
827 size = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
828 offset = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
829 |
2 | 830 types = { |
831 0x0000: 'kDexTypeHeaderItem', | |
832 0x0001: 'kDexTypeStringIdItem', | |
833 0x0002: 'kDexTypeTypeIdItem', | |
834 0x0003: 'kDexTypeProtoIdItem', | |
835 0x0004: 'kDexTypeFieldIdItem', | |
836 0x0005: 'kDexTypeMethodIdItem', | |
837 0x0006: 'kDexTypeClassDefItem', | |
838 0x1000: 'kDexTypeMapList', | |
839 0x1001: 'kDexTypeTypeList', | |
840 0x1002: 'kDexTypeAnnotationSetRefList', | |
841 0x1003: 'kDexTypeAnnotationSetItem', | |
842 0x2000: 'kDexTypeClassDataItem', | |
843 0x2001: 'kDexTypeCodeItem', | |
844 0x2002: 'kDexTypeStringDataItem', | |
845 0x2003: 'kDexTypeDebugInfoItem', | |
846 0x2004: 'kDexTypeAnnotationItem', | |
847 0x2005: 'kDexTypeEncodedArrayItem', | |
848 0x2006: 'kDexTypeAnnotationsDirectoryItem' | |
849 } | |
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 = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
852 'type unused size offset'.split() |
0 | 853 pass |
854 | |
855 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
856 class _DEX_MapItemBlock(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
857 num = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
858 items = array('num', _DEX_MapItem) |
0 | 859 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
860 child_names = 'num items'.split() |
0 | 861 pass |
862 | |
863 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
864 class _DEX_StringId(composite): |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
865 stringDataOff = depend_off('_DEX_StringDataItem')(uint32) |
0 | 866 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
867 child_names = ('stringDataOff',) |
0 | 868 pass |
869 | |
870 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
871 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
|
872 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
|
873 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
874 child_names = ('descriptorIdx',) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
875 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
876 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
877 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
878 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
|
879 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
|
880 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
|
881 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
|
882 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
|
883 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
|
884 (value_ref('_DEX_ProtoId.parametersOff'))) |
0 | 885 |
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
|
886 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
|
887 'parametersOffRef'.split() |
0 | 888 pass |
889 | |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
890 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
891 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
|
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 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
|
894 nameIdx = depend_idx('DEXFile.stringIds')(uint32) |
0 | 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 typeIdx nameIdx'.split() |
0 | 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_MethodId(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')(uint16) |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
902 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
|
903 nameIdx = depend_idx('DEXFile.stringIds')(uint32) |
2 | 904 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
905 child_names = 'classIdx protoIdx nameIdx'.split() |
2 | 906 pass |
907 | |
908 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
909 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
|
910 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
|
911 accessFlags = uint32 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
912 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
|
913 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
|
914 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
|
915 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
|
916 (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
|
917 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
|
918 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
|
919 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
|
920 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
|
921 (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
|
922 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
|
923 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
|
924 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
|
925 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
|
926 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
|
927 (value_ref('_DEX_ClassDef.staticValuesOff'))) |
2 | 928 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
929 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
|
930 '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
|
931 '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
|
932 'classDataOff staticValuesOff staticValuesOffRef'.split() |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
933 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
934 |
2 | 935 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
936 class _DEX_ClassDataHeader(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
937 staticFieldsSize = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
938 instanceFieldsSize = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
939 directMethodsSize = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
940 virtualMethodsSize = uleb128 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
941 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
942 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
943 'staticFieldsSize instanceFieldsSize directMethodsSize ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
944 'virtualMethodsSize'.split() |
2 | 945 pass |
946 | |
947 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
948 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
|
949 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
|
950 accessFlags = uleb128 |
2 | 951 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
952 child_names = 'fieldIdx accessFlags'.split() |
2 | 953 pass |
954 | |
955 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
956 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
|
957 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
|
958 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
|
959 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
|
960 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
|
961 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
|
962 (value_ref('_DEX_Method.codeOff'))) |
2 | 963 |
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
|
964 child_names = 'methodIdx accessFlags codeOff codeOffRef'.split() |
2 | 965 pass |
966 | |
967 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
968 class _DEX_ClassData(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
969 header = _DEX_ClassDataHeader |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
970 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
|
971 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
|
972 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
|
973 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
|
974 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
975 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
976 'header ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
977 '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
|
978 pass |
917f0a9b9d06
Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents:
5
diff
changeset
|
979 |
917f0a9b9d06
Refactor _DEX_TypeItem from _DEX_TypeList for layout info tracking
Thinker K.F. Li <thinker@codemud.net>
parents:
5
diff
changeset
|
980 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
981 class _DEX_TypeList(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
982 num = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
983 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
|
984 |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
985 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
|
986 pass |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
987 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
988 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
989 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
|
990 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
|
991 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
|
992 |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
33
diff
changeset
|
993 child_names = 'padding value'.split() |
2 | 994 pass |
995 | |
996 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
997 class _DEX_Try(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
998 startAddr = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
999 insnCount = uint16 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
1000 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
|
1001 '_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
|
1002 catch_ref = ref('_DEX_Catch') |
2 | 1003 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1004 child_names = 'startAddr insnCount handlerOff'.split() |
2 | 1005 pass |
1006 | |
1007 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1008 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
|
1009 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
|
1010 address = uleb128 |
2 | 1011 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1012 child_names = 'typeIdx address'.split() |
2 | 1013 pass |
1014 | |
1015 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1016 class _DEX_CatchAllHandler(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1017 address = uleb128 |
2 | 1018 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1019 child_names = 'address'.split() |
2 | 1020 pass |
1021 | |
1022 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1023 class _DEX_Catch(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1024 size = leb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1025 handlers = array('count', _DEX_CatchHandler) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1026 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
|
1027 _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
|
1028 try_ref = ref('_DEX_Try') |
2 | 1029 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1030 child_names = 'size handlers catchAllHandler'.split() |
2 | 1031 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1032 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1033 def catchesAll(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1034 return self.size <= 0 |
2 | 1035 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1036 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1037 def count(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1038 if self.size < 0: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1039 return -self.size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1040 return self.size |
2 | 1041 pass |
1042 | |
1043 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1044 class _DEX_Code(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1045 registersSize = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1046 insSize = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1047 outsSize = uint16 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1048 triesSize = uint16 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
1049 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
|
1050 insnsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1051 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
|
1052 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1053 _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
|
1054 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1055 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
|
1056 try_items = cond(_has_tries, |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1057 array('triesSize', _DEX_Try)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1058 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1059 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
|
1060 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
|
1061 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
|
1062 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
|
1063 'catch_handler_items.value.items', 'try_ref') |
2 | 1064 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1065 padding2 = auto_align(2) |
2 | 1066 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1067 child_names = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1068 'registersSize insSize outsSize triesSize debugInfoOff ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1069 '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
|
1070 'catch_handler_items padding2'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1071 pass |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1072 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1073 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1074 class _DEX_AnnotationSetItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1075 size = uint32 |
17
d0806672da04
Declare dependencies for dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
15
diff
changeset
|
1076 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
|
1077 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1078 child_names = 'size annotationOffs'.split() |
2 | 1079 pass |
1080 | |
1081 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1082 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
|
1083 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
|
1084 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
|
1085 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
|
1086 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
|
1087 (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
|
1088 'annotationsOff'))) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1089 |
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
|
1090 child_names = 'fieldIdx annotationsOff annotationsOffRef'.split() |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1091 pass |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1092 |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1093 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1094 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
|
1095 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
|
1096 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
|
1097 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
|
1098 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
|
1099 (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
|
1100 'annotationsOff'))) |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1101 |
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
|
1102 child_names = 'methodIdx annotationsOff annotationsOffRef'.split() |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1103 pass |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1104 |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1105 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1106 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
|
1107 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
|
1108 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
|
1109 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
|
1110 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
|
1111 (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
|
1112 'annotationsOff'))) |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1113 |
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
|
1114 child_names = 'methodIdx annotationsOff annotationsOffRef'.split() |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1115 pass |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1116 |
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1117 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1118 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
|
1119 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
|
1120 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
|
1121 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
|
1122 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
|
1123 (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
|
1124 'classAnnotationsOff'))) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1125 fieldsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1126 methodsSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1127 parametersSize = uint32 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1129 fieldAnnotationsItems = array('fieldsSize', _DEX_FieldAnnotationsItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1130 methodAnnotationsItems = array('methodsSize', _DEX_MethodAnnotationsItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1131 parameterAnnotationsItems = array('parametersSize', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1132 _DEX_ParameterAnnotationsItem) |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1133 |
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
|
1134 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
|
1135 'fieldsSize methodsSize ' \ |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1136 'parametersSize fieldAnnotationsItems methodAnnotationsItems ' \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1137 'parameterAnnotationsItems'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1138 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1139 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1140 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1141 class _DEX_AnnotationArray(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1142 size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1143 # 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
|
1144 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1145 child_names = 'size annotations'.split() |
3
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1146 pass |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1147 |
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1148 |
8 | 1149 ## |
1150 # | |
1151 # \see createAnnotationMember() in dalvik/vm/reflect/Annotation.c | |
1152 # | |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1153 class _DEX_AnnotationMember_noname(composite): |
8 | 1154 # |
1155 # Constants from DexFile.h | |
1156 # | |
1157 kDexAnnotationByte = 0x00 | |
1158 kDexAnnotationShort = 0x02 | |
1159 kDexAnnotationChar = 0x03 | |
1160 kDexAnnotationInt = 0x04 | |
1161 kDexAnnotationLong = 0x06 | |
1162 kDexAnnotationFloat = 0x10 | |
1163 kDexAnnotationDouble = 0x11 | |
1164 kDexAnnotationString = 0x17 | |
1165 kDexAnnotationType = 0x18 | |
1166 kDexAnnotationField = 0x19 | |
1167 kDexAnnotationMethod = 0x1a | |
1168 kDexAnnotationEnum = 0x1b | |
1169 kDexAnnotationArray = 0x1c | |
1170 kDexAnnotationAnnotation = 0x1d | |
1171 kDexAnnotationNull = 0x1e | |
1172 kDexAnnotationBoolean = 0x1f | |
1173 | |
1174 kDexAnnotationValueTypeMask = 0x1f | |
1175 kDexAnnotationValueArgShift = 5 | |
1176 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1177 valueType = uint8 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1178 value_map = { |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1179 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
|
1180 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
|
1181 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
|
1182 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
|
1183 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
|
1184 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
|
1185 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
|
1186 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
|
1187 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
|
1188 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
|
1189 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
|
1190 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
|
1191 kDexAnnotationNull: abs_value(0), |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1192 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
|
1193 kDexAnnotationArray: _DEX_AnnotationArray, |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1194 # kDexAnnotationAnnotation: _DEX_AnnotationItem_novisibility |
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 value = switch('vtype', value_map) |
8 | 1197 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1198 child_names = 'valueType value'.split() |
8 | 1199 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1200 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1201 def vtype(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1202 vtype = self.valueType & self.kDexAnnotationValueTypeMask |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1203 return vtype |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1204 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1205 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1206 def width(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1207 width = self.valueType >> self.kDexAnnotationValueArgShift |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1208 return width |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1209 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1210 @property |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1211 def value_width(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1212 width = self.valueType >> self.kDexAnnotationValueArgShift |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1213 return width + 1 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1214 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1215 |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1216 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1217 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
|
1218 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
|
1219 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1220 child_names = 'nameIdx valueType value'.split() |
8 | 1221 pass |
1222 | |
1223 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1224 _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
|
1225 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1226 |
8 | 1227 ## \brief Annotation item |
1228 # | |
1229 # \see processEncodedAnnotation() in dalvik/vm/reflect/Annotation.c | |
1230 # | |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1231 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
|
1232 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
|
1233 size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1234 members = array('size', _DEX_AnnotationMember) |
8 | 1235 |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1236 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
|
1237 |
8 | 1238 kDexVisibilityBuild = 0x00 |
1239 kDexVisibilityRuntime = 0x01 | |
1240 kDexVisibilitySystem = 0x02 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1241 pass |
8 | 1242 |
1243 | |
19
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1244 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
|
1245 visibility = uint8 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1246 |
6008b9a9d33e
Declare dependencies for indics for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
18
diff
changeset
|
1247 child_names = 'visibility typeIdx size members'.split() |
8 | 1248 pass |
1249 | |
1250 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1251 _DEX_AnnotationMember. \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1252 value_map[_DEX_AnnotationMember.kDexAnnotationAnnotation] = \ |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1253 _DEX_AnnotationItem_novisibility |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1254 |
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1255 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1256 class _DEX_EncodedArrayItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1257 size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1258 elements = array('size', _DEX_AnnotationMember_noname) |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1259 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1260 child_names = 'size elements'.split() |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1261 pass |
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1262 |
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1263 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1264 class _DEX_DebugCodeBlock(relocatable): |
11 | 1265 DBG_END_SEQUENCE = 0x00 |
1266 DBG_ADVANCE_PC = 0x01 | |
1267 DBG_ADVANCE_LINE = 0x02 | |
1268 DBG_START_LOCAL = 0x03 | |
1269 DBG_START_LOCAL_EXTENDED = 0x04 | |
1270 DBG_END_LOCAL = 0x05 | |
1271 DBG_RESTART_LOCAL = 0x06 | |
1272 DBG_SET_PROLOGUE_END = 0x07 | |
1273 DBG_SET_EPILOGUE_BEGIN = 0x08 | |
1274 DBG_SET_FILE = 0x09 | |
1275 DBG_FIRST_SPECIAL = 0x0a | |
1276 DBG_LINE_BASE = -4 | |
1277 DBG_LINE_RANGE = 15 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1278 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1279 opcodes = None |
11 | 1280 data_size = None |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1281 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1282 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1283 def parse(parent, data, off): |
11 | 1284 moff = man_off(off) |
1285 | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1286 self = _DEX_DebugCodeBlock() |
11 | 1287 |
1288 # | |
1289 # Parse debug opcodes | |
1290 # | |
1291 opcodes = [] | |
1292 while True: | |
1293 opcode = _to_uint(data[moff(1):moff()]) | |
1294 | |
1295 if opcode == self.DBG_END_SEQUENCE: | |
1296 opcodes.append((opcode,)) | |
1297 break | |
1298 elif opcode == self.DBG_ADVANCE_PC: | |
1299 adv, sh = _uleb128(data[moff():moff() + 5]) | |
1300 moff(sh) | |
1301 opcodes.append((opcode, adv)) | |
1302 pass | |
1303 elif opcode == self.DBG_ADVANCE_LINE: | |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1304 adv, sh = _leb128(data[moff():moff() + 5]) |
11 | 1305 moff(sh) |
1306 opcodes.append((opcode, adv)) | |
1307 pass | |
1308 elif opcode in (self.DBG_START_LOCAL, | |
1309 self.DBG_START_LOCAL_EXTENDED): | |
1310 reg, sh = _uleb128(data[moff():moff() + 5]) | |
1311 moff(sh) | |
1312 name, sh = _uleb128(data[moff():moff() + 5]) | |
1313 moff(sh) | |
1314 descriptor, sh = _uleb128(data[moff():moff() + 5]) | |
1315 moff(sh) | |
1316 if opcode == self.DBG_START_LOCAL_EXTENDED: | |
1317 signature, sh = _uleb128(data[moff():moff() + 5]) | |
1318 moff(sh) | |
1319 opcodes.append((opcode, reg, name, descriptor, signature)) | |
1320 else: | |
1321 opcodes.append((opcode, reg, name, descriptor)) | |
1322 pass | |
1323 pass | |
1324 elif opcode == self.DBG_END_LOCAL: | |
1325 reg, sh = _uleb128(data[moff():moff() + 5]) | |
1326 moff(sh) | |
1327 opcodes.append((opcode, reg)) | |
1328 pass | |
1329 elif opcode == self.DBG_RESTART_LOCAL: | |
1330 reg, sh = _uleb128(data[moff():moff() + 5]) | |
1331 moff(sh) | |
1332 opcodes.append((opcode, reg)) | |
1333 pass | |
1334 elif opcode in (self.DBG_SET_PROLOGUE_END, | |
1335 self.DBG_SET_EPILOGUE_BEGIN, | |
1336 self.DBG_SET_FILE): | |
1337 opcodes.append((opcode,)) | |
1338 pass | |
1339 else: | |
1340 opcodes.append((opcode,)) | |
1341 pass | |
1342 pass | |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1343 self.opcodes = tuple(opcodes) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1344 |
11 | 1345 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
|
1346 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1347 return self |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1348 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1349 def compute_size(self): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1350 def compute_opcode_size(code): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1351 opcode = code[0] |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1352 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1353 if opcode == self.DBG_END_SEQUENCE: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1354 size = 1 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1355 elif opcode == self.DBG_ADVANCE_PC: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1356 size = 1 + _uleb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1357 elif opcode == self.DBG_ADVANCE_LINE: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1358 size = 1 + _leb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1359 elif opcode in (self.DBG_START_LOCAL, |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1360 self.DBG_START_LOCAL_EXTENDED): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1361 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
|
1362 _uleb128_sz(code[3]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1363 if len(code) == 5: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1364 size = size + _uleb128_sz(code[4]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1365 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1366 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1367 elif opcode == self.DBG_END_LOCAL: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1368 size = 1 + _uleb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1369 elif opcode == self.DBG_RESTART_LOCAL: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1370 size = 1 + _uleb128_sz(code[1]) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1371 elif opcode in (self.DBG_SET_PROLOGUE_END, |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1372 self.DBG_SET_EPILOGUE_BEGIN, |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1373 self.DBG_SET_FILE): |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1374 size = 1 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1375 else: |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1376 size = 1 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1377 pass |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1378 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1379 return size |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1380 |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1381 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
|
1382 opcode_sizes = [i for i in opcode_sizes] |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1383 opcodes_size = sum(opcode_sizes) |
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1384 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1385 self.data_size = opcodes_size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1386 pass |
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 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1389 # |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1390 # Parse debug opcodes |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1391 # |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1392 opcodes = self.opcodes |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1393 opcodebins = [] |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1394 for code in opcodes: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1395 opcode = code[0] |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1396 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1397 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
|
1398 opcodebins.append(chr(opcode)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1399 break |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1400 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
|
1401 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
|
1402 opcodebins.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_ADVANCE_LINE: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1405 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
|
1406 opcodebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1407 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1408 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
|
1409 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
|
1410 _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
|
1411 codebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1412 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1413 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
|
1414 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
|
1415 _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
|
1416 _to_uleb128(code[4]) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1417 codebins.append(codebin) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1418 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1419 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
|
1420 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
|
1421 codebins.append(codebin) |
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 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
|
1424 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
|
1425 codebins.append(codebin) |
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 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
|
1428 self.DBG_SET_EPILOGUE_BEGIN, |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1429 self.DBG_SET_FILE): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1430 opcodebins.append(chr(opcode)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1431 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1432 else: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1433 opcodebins.append(chr(opcode)) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1434 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1435 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1436 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1437 return ''.join(opcodebins) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1438 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1439 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1440 return ('opcodes',) |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1441 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1442 |
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 class _DEX_DebugInfoItem(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1445 start_line = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1446 parameters_size = uleb128 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1447 parameters = array('parameters_size', uleb128) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1448 opcodes = _DEX_DebugCodeBlock |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1449 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1450 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
|
1451 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1452 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1453 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1454 class _DEX_StringDataItem(composite): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1455 size = uleb128 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1456 data = rawstr_size_name('size') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1457 padding = rawstr(1) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1458 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1459 child_names = 'size data padding'.split() |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1460 pass |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1461 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1462 |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
1463 class dummy(_dex_type): |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1464 data_size = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1465 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1466 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1467 def parse(parent, data, off): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1468 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
|
1469 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
|
1470 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1471 self = _DEX_StringDataItem() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1472 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1473 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1474 self.data = data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1475 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
|
1476 return self |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1477 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1478 def compute_size(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1479 size = len(self.data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1480 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1481 size_sz = _uleb128_sz(size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1482 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
|
1483 pass |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1484 |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1485 def to_str(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1486 size = len(self.data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1487 self.size = size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1488 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
|
1489 return data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1490 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1491 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1492 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1493 class DEXFile(composite): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1494 fname = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1495 data = None |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1496 header = _DEX_header |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1497 maps = _DEX_MapItemBlock |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1498 stringIds = array(None, _DEX_StringId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1499 typeIds = array(None, _DEX_TypeId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1500 protoIds = array(None, _DEX_ProtoId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1501 fieldIds = array(None, _DEX_FieldId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1502 methodIds = array(None, _DEX_MethodId) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1503 classDefs = array(None, _DEX_ClassDef) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1504 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
|
1505 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
|
1506 codeItems = array(None, _DEX_Code) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1507 annotationSetItems = array(None, _DEX_AnnotationSetItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1508 annotationsDirectoryItems = array(None, _DEX_AnnotationsDirectoryItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1509 annotationItems = array(None, _DEX_AnnotationItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1510 encodedArrayItems = array(None, _DEX_EncodedArrayItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1511 debugInfoItems = array(None, _DEX_DebugInfoItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1512 stringDataItems = array(None, _DEX_StringDataItem) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1513 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1514 child_names = 'header'.split() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1515 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1516 block_defs = { |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1517 # 0x0000: 'kDexTypeHeaderItem', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1518 0x0001: 'stringIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1519 0x0002: 'typeIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1520 0x0003: 'protoIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1521 0x0004: 'fieldIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1522 0x0005: 'methodIds', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1523 0x0006: 'classDefs', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1524 # 0x1000: 'kDexTypeMapList', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1525 0x1001: 'typeLists', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1526 # 0x1002: 'kDexTypeAnnotationSetRefList', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1527 0x1003: 'annotationSetItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1528 0x2000: 'classDatas', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1529 0x2001: 'codeItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1530 0x2002: 'stringDataItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1531 0x2003: 'debugInfoItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1532 0x2004: 'annotationItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1533 0x2005: 'encodedArrayItems', |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1534 0x2006: 'annotationsDirectoryItems' |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1535 } |
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 @staticmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1538 def open(fname): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1539 fo = file(fname, 'r') |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1540 data = fo.read() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1541 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1542 dex = DEXFile.parse(data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1543 dex.fname = fname |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1544 return dex |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1545 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1546 @classmethod |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1547 def parse(clazz, data): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1548 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
|
1549 obj.data = data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1550 obj._parse(data) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1551 return obj |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1552 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1553 def _parse_maps(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1554 data = self.data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1555 header = self.header |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1556 off = header.mapOff |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1557 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
|
1558 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1559 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1560 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
|
1561 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
|
1562 return |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1563 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1564 data = self.data |
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 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
|
1567 off = block_map.offset |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1568 num = block_map.size |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1569 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1570 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
|
1571 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
|
1572 setattr(self, child_name, blk) |
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 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1575 def _parse_blocks(self): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1576 data = self.data |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1577 maps = self.maps.items.items |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1578 for map in maps: |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1579 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
|
1580 self._parse_block(map) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1581 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1582 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1583 pass |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1584 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1585 def _parse(self, data): |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1586 self._parse_maps() |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1587 self._parse_blocks() |
13
c05fac334ab1
compute size for objects
Thinker K.F. Li <thinker@codemud.net>
parents:
12
diff
changeset
|
1588 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1589 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1590 def children(self): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1591 return 'header stringIds typeIds protoIds fieldIds methodIds ' \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1592 'classDefs typeLists annotationSetItems classDatas codeItems ' \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1593 'stringDataItems debugInfoItems annotationItems ' \ |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1594 'encodedArrayItems annotationsDirectoryItems'.split() |
11 | 1595 pass |
1596 | |
1597 | |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1598 if __name__ == '__main__': |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
24
diff
changeset
|
1599 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
|
1600 |
2 | 1601 print 'Header' |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1602 h = dex.header |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1603 for attr in h.child_names: |
2 | 1604 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
|
1605 pass |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1606 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1607 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1608 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
|
1609 |
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
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 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
|
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 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
|
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 fieldIds is %d bytes' % (dex.fieldIds.data_size) |
2 | 1618 |
1619 print | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1620 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
|
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 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
|
1624 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1625 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1626 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
|
1627 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1628 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1629 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
|
1630 |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1631 print |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1632 print 'Size of codeItems is %d bytes' % (dex.codeItems.data_size) |
2 | 1633 |
1634 print | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1635 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
|
1636 (dex.annotationSetItems.data_size) |
2 | 1637 |
1638 print | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1639 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
|
1640 (dex.annotationsDirectoryItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1641 |
3
a78db169b0c8
parse AnnotationSetItems
Thinker K.F. Li <thinker@codemud.net>
parents:
2
diff
changeset
|
1642 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1643 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
|
1644 (dex.annotationItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1645 |
4
b0766f1984bb
parse annotationsDirectoryItem
Thinker K.F. Li <thinker@codemud.net>
parents:
3
diff
changeset
|
1646 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1647 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
|
1648 (dex.encodedArrayItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1649 |
8 | 1650 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1651 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
|
1652 (dex.debugInfoItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1653 |
10
123c7a8bbf4c
Parse EncodedArrayItems
Thinker K.F. Li <thinker@codemud.net>
parents:
9
diff
changeset
|
1654 print |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1655 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
|
1656 (dex.stringDataItems.data_size) |
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1657 |
2 | 1658 print |
1659 print 'Data maps' | |
15
c98be35b572b
Rewrote dexfile.py to base on declaration
Thinker K.F. Li <thinker@codemud.net>
parents:
14
diff
changeset
|
1660 maps = dex.maps.items.items |
2 | 1661 for map in maps: |
1662 print '\t0x%04x(%s) size=%d offset=0x%08x' % (map.type, | |
1663 map.types[map.type], | |
1664 map.size, | |
1665 map.offset) | |
18
f36b14d1f122
collect dependencies for classes in dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
17
diff
changeset
|
1666 pass |
1
05346b632adb
Parse records mentioned in file header
Thinker K.F. Li <thinker@codemud.net>
parents:
0
diff
changeset
|
1667 pass |