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