Skip to content

Commit af723c4

Browse files
author
vbuell
committed
1 parent 47edff2 commit af723c4

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

javaobj.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def _readString(self):
7272
ba = self.object_stream.read(length)
7373
return ba
7474

75-
def do_classdesc(self):
75+
def do_classdesc(self, parent=None):
7676
# TC_CLASSDESC className serialVersionUID newHandle classDescInfo
7777
# classDescInfo:
7878
# classDescFlags fields classAnnotation superClassDesc
@@ -88,50 +88,60 @@ def do_classdesc(self):
8888
# prim_typecode fieldName
8989
# objectDesc:
9090
# obj_typecode fieldName className1
91-
print "do_classdesc"
91+
print "[classdesc]"
9292
ba = self._readString()
9393
print "Class name:", ba
9494
(serialVersionUID, newHandle, classDescFlags) = self._readStruct(">LLB", 4+4+1)
9595
print "Serial: 0x%X newHanle: 0x%X. classDescFlags: 0x%X" % (serialVersionUID, newHandle, classDescFlags)
9696
(length, ) = self._readStruct(">H", 2)
9797
print "Fields num: 0x%X" % length
9898

99+
fields_vals = []
100+
fields_type = []
99101
for fieldId in range(length):
100102
(type, ) = self._readStruct(">B", 1)
101103
ba = self._readString()
102104
print "FieldType: 0x%X" % type, ba
103105
(opid, ) = self._readStruct(">B", 1)
104106
print "OpCode: 0x%X" % opid
105107
res = self.opmap.get(opid, self.do_default_stuff)()
108+
fields_vals.append(res)
109+
fields_type.append(type)
110+
if parent:
111+
parent.__setattr__("__fields", fields_vals)
112+
parent.__setattr__("__types", fields_types)
106113

107-
def do_blockdata(self):
114+
def do_blockdata(self, parent=None):
108115
# TC_BLOCKDATA (unsigned byte)<size> (byte)[size]
109116
print "[blockdata]"
110117
(length, ) = self._readStruct(">B", 1)
111118
ba = self.object_stream.read(length)
112119
self.finalValue = ba
113120

114-
def do_class(self):
121+
def do_class(self, parent=None):
115122
# TC_CLASS classDesc newHandle
116123
print "[class]"
117124

118-
def do_object(self):
125+
def do_object(self, parent=None):
126+
class JavaObject(object):
127+
pass
128+
object = JavaObject()
119129
# TC_OBJECT classDesc newHandle classdata[] // data for each class
120130
print "[object]"
121131
(opid, ) = self._readStruct(">B", 1)
122132
print "OpCode: 0x%X" % opid
123-
res = self.opmap.get(opid, self.do_default_stuff)()
133+
res = self.opmap.get(opid, self.do_default_stuff)(object)
124134
self.finalValue = res
125135

126-
def do_string(self):
136+
def do_string(self, parent=None):
127137
print "[string]"
128138
ba = self._readString()
129139
# (handle, ) = self._readStruct(">B", 1)
130140
return str(ba)
131141

132-
def do_reference(self):
142+
def do_reference(self, parent=None):
133143
(handle, reference) = self._readStruct(">HH", 4)
134144
pass
135145

136-
def do_default_stuff(self):
146+
def do_default_stuff(self, parent=None):
137147
raise RuntimeError("Unknown opcode")

0 commit comments

Comments
 (0)