Пример #1
0
    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
Пример #2
0
 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
Пример #3
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