@@ -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