@@ -57,7 +57,7 @@ class RTTITypeDescriptor(RTTIStruc):
5757 else :
5858 idc .add_struc_member (msid , "pVFTable" , ida_idaapi .BADADDR , ida_bytes .FF_DATA | u .PTR_TYPE | ida_bytes .FF_0OFF , u .mt_address ().tid , u .PTR_SIZE )
5959 idc .add_struc_member (msid , "spare" , ida_idaapi .BADADDR , ida_bytes .FF_DATA | u .PTR_TYPE , - 1 , u .PTR_SIZE )
60- idc .add_struc_member (msid , "name" , ida_idaapi .BADADDR , ida_bytes .FF_DATA | ida_bytes .FF_STRLIT , u . mt_ascii (). tid , 0 )
60+ idc .add_struc_member (msid , "name" , ida_idaapi .BADADDR , ida_bytes .FF_DATA | ida_bytes .FF_STRLIT , ida_nalt . STRTYPE_C , 0 )
6161
6262 # get structure related info
6363 tid = msid
@@ -75,7 +75,7 @@ def __init__(self, ea):
7575 if strlen is None :
7676 # not a real vtable
7777 return
78- self .size = self .size + strlen
78+ self .size = self .size + strlen + 1 # for NULL byte
7979
8080 # get mangled name
8181 bmangled = ida_bytes .get_strlit_contents (name , strlen , 0 )
@@ -240,13 +240,6 @@ def parse_bca(self, ea, nb_classes):
240240 for i in range (0 , nb_classes ):
241241 bcdoff = ea + i * 4
242242
243- # apply data type to items in BCA
244- #ida_bytes.create_dword(bcdoff, 4)
245- #if u.x64:
246- # ida_offset.op_offset(bcdoff, ida_bytes.OPND_MASK, u.REF_OFF|ida_nalt.REFINFO_RVAOFF, -1, 0, 0)
247- #else:
248- # ida_offset.op_offset(bcdoff, ida_bytes.OPND_MASK, u.REF_OFF, -1, 0, 0)
249-
250243 # get relevant structures
251244 bcdea = ida_bytes .get_32bit (bcdoff ) + u .x64_imagebase ()
252245 bcd = RTTIBaseClassDescriptor (bcdea )
@@ -411,6 +404,9 @@ def parse_msvc_vftable():
411404 ida_auto .auto_wait ()
412405 if len ([xrea for xrea in u .get_refs_to (RTTIBaseClassArray .tid )]) == 0 :
413406 [ida_bytes .create_struct (result [x ].chd .bca .ea , result [x ].chd .bca .size , RTTIBaseClassArray .tid , True ) for x in result ]
407+ if len ([xrea for xrea in u .get_refs_to (RTTIClassHierarchyDescriptor .tid )]) == 0 :
408+ [ida_bytes .create_struct (result [x ].chd .ea , RTTIClassHierarchyDescriptor .size , RTTIClassHierarchyDescriptor .tid , True ) for x in result ]
409+ [[ida_bytes .create_struct (y .ea , RTTIBaseClassDescriptor .size , RTTIBaseClassDescriptor .tid , True ) for y in result [x ].chd .bca .bases ] for x in result ]
414410 ida_auto .auto_wait ()
415411
416412 return result
0 commit comments