Exemplo n.º 1
0
 def apply_member(cls, struct, data):
     ida_struct.add_struc_member(struct, data['name'], data['offset'],
                                 data['flag'], data['opinfo'], data['size'])
     member = ida_struct.get_member(struct, data['offset'])
     if 'comment' in data and data['comment']:
         ida_struct.set_member_cmt(member, data['comment'], False)
     if 'repeatable_comment' in data and data['repeatable_comment']:
         ida_struct.set_member_cmt(member, data['repeatable_comment'], True)
Exemplo n.º 2
0
 def __call__(self):
     struc = ida_struct.get_struc_id(self.sname)
     sptr = ida_struct.get_struc(struc)
     cmt = self.cmt if self.cmt else ""
     if self.smname:
         mptr = ida_struct.get_member_by_name(sptr, self.smname)
         ida_struct.set_member_cmt(mptr, cmt, self.repeatable_cmt)
     else:
         ida_struct.set_struc_cmt(sptr.id, cmt, self.repeatable_cmt)
 def __call__(self):
     struc = ida_struct.get_struc_id(Event.encode(self.sname))
     sptr = ida_struct.get_struc(struc)
     cmt = Event.encode(self.cmt if self.cmt else '')
     if self.smname:
         mptr = ida_struct.get_member_by_name(sptr,
                                              Event.encode(self.smname))
         ida_struct.set_member_cmt(mptr, cmt, self.repeatable_cmt)
     else:
         ida_struct.set_struc_cmt(sptr.id, cmt, self.repeatable_cmt)
Exemplo n.º 4
0
def create_struct(name, fields, size):

    struct_id = idaapi.get_struc_id(name)
    # print struct_id
    if struct_id != idaapi.BADADDR:
        i = ida_kernwin.ask_yn(
            0,
            "A class structure for %s already exists. Are you sure you want to remake it?"
            % name)
        if i == idaapi.BADADDR:
            return
        if i == 1:
            idaapi.del_struc_members(idaapi.get_struc(struct_id), 0,
                                     idaapi.get_struc_size(struct_id))
            # struct_id = idc.AddStrucEx(idaapi.BADADDR, name + "_vtbl", 0)
    else:
        struct_id = idaapi.add_struc(idaapi.BADADDR, name, 0)
    if struct_id == idaapi.BADADDR:
        Warning(
            "Could not create the class structure!.\nPlease check something.")
        return
    sptr = idaapi.get_struc(struct_id)
    for off in fields:
        off, type_name, type_kind, field_name = fields[off]
        print(
            "Process field. Off = 0x%04X, type_name = %s (%d: %s), field_name = %s"
            %
            (off, type_name, type_kind, type_sizes[type_kind][0], field_name))
        type_size = type_sizes[type_kind][1]
        ret = ida_struct.add_struc_member(sptr, field_name.decode(), off,
                                          flags_dict[type_size], None,
                                          type_size)
        if ret != 0:
            ida_kernwin.warning("Unknown error! Err = %d" % ret)
            return
        mptr = ida_struct.get_member(sptr, off)
        ida_struct.set_member_cmt(
            mptr, " --> %s (%d: %s)" %
            (type_name.decode(), type_kind, type_sizes[type_kind][0]), False)
    struct_size = ida_struct.get_struc_size(sptr)
    if size < struct_size:
        ida_kernwin.warning(
            "Struct create error! final size (%d) > instanse size (%d)" %
            (struct_size, size))
    elif size > struct_size:
        for i in range(size - struct_size):
            ida_struct.add_struc_member(sptr, "dummy%d" % i, idaapi.BADADDR,
                                        idaapi.FF_BYTE, None, 1)