def data(self): # if idx is None this is called for the pre-apply data identity validation # we'll return None so data will definitely not match if self.idx is None: return None struc_id = ida_struct.get_struc_by_idx(self.idx) struct = ida_struct.get_struc(struc_id) # Skip TIL structures if struct.from_til(): return None # Skip empty structures if not struct.memqty: return None d = {} d['name'] = ida_struct.get_struc_name(struc_id) d['comment'] = ida_struct.get_struc_cmt(struc_id, False) d['repeatable_comment'] = ida_struct.get_struc_cmt(struc_id, False) d['size'] = ida_struct.get_struc_size(struct) d['union'] = ida_struct.is_union(struc_id) # TODO: struct alignment, hidden, listed d['members'] = {} member_idx = 0 while member_idx != idaapi.BADADDR: member = struct.get_member(member_idx) d['members'][member_idx] = self.member_data(member) member_idx = ida_struct.get_next_member_idx(struct, member.soff) # TODO: FIX issue with looping over members member_idx = idaapi.BADADDR return d
def struc_created(self, tid): print("struct created") return name = ida_struct.get_struc_name(tid) is_union = ida_struct.is_union(tid) self._send_packet(evt.StrucCreatedEvent(tid, name, is_union)) return 0
def struc_created(self, tid): name = ida_struct.get_struc_name(tid) is_union = ida_struct.is_union(tid) self._send_event(StrucCreatedEvent(tid, name, is_union)) return 0