示例#1
0
 def __call__(self):
     if self.is_enum:
         enum = ida_enum.get_enum(self.oldname)
         ida_enum.set_enum_name(enum, self.newname)
     else:
         emem = ida_enum.get_enum_member_by_name(self.oldname)
         ida_enum.set_enum_member_name(emem, self.newname)
 def __call__(self):
     if self.is_enum:
         enum = ida_enum.get_enum(Event.encode(self.oldname))
         ida_enum.set_enum_name(enum, Event.encode(self.newname))
     else:
         emem = ida_enum.get_enum_member_by_name(Event.encode(self.oldname))
         ida_enum.set_enum_member_name(emem, Event.encode(self.newname))
def replace_sym_const(ea, api):
    for arg_n in api_list[api].keys():
        # Calling Convention: cdecl, stdcall
        push_cnt = 0
        ea_search = ea
        while push_cnt < arg_n:
            ea_search = idc.prev_head(ea_search)
            op = idc.print_insn_mnem(ea_search)
            if op == "push":
                push_cnt += 1

        operand = idc.print_operand(ea_search, 0)
        if operand.isdigit():
            operand = int(idc.print_operand(ea_search, 0))
        else:
            continue

        enum_name = api + "_" + str(arg_n)
        const = api_list[api][arg_n][operand]

        enum_id = ida_enum.get_enum(enum_name)
        if enum_id == BADADDR:
            # add new enum
            enum_qty = ida_enum.get_enum_qty()
            enum_id = ida_enum.add_enum(enum_qty, enum_name, 0)

        symbolic_id = ida_enum.get_enum_member_by_name(const)
        if symbolic_id == BADADDR:
            # add new enum member
            ida_enum.add_enum_member(enum_id, const, operand, 0xffffffff)

        ida_bytes.op_enum(ea_search, 0, enum_id, 0)
示例#4
0
文件: bipenum.py 项目: xcode2010/bip
    def get(cls, name):
        """
            Class method for recuperating a :class:`BEnumMember` object from
            its name.

            :return: A :class:`BEnumMember` object associated with the name.
            :raise ValueError: If no enum member with this name exist.
        """
        mid = ida_enum.get_enum_member_by_name(name)
        if mid == idc.BADADDR:
            raise ValueError(
                "Enum member with name {} was not found".format(name))
        return cls(mid)
示例#5
0
def rename_constant(arg_ea, fct_name, arg_name, arg_enums):
    """ Rename constants to values from standard enumerations. """
    instruction = idc.print_insn_mnem(arg_ea)
    if instruction == 'push':
        op_num = 0
    elif instruction == 'mov':
        op_num = 1
    else:
        raise RenamingException('Constant: unhandled instruction ' +
                                instruction)

    op_val = idc.get_operand_value(arg_ea, op_num)
    # NULL
    if op_val == 0:
        targetid = ida_enum.get_enum_member_by_name('NULL_{}_{}'.format(arg_name, fct_name))
        serial = 0
        enumid = ida_enum.get_enum(NULL_ENUM_NAME)
        constid = idc.get_enum_member(enumid, 0, serial, -1)
        while constid != idaapi.BADADDR:
            if constid == targetid:
                idc.op_enum(arg_ea, op_num, enumid, serial)
                return
            serial = serial + 1
            constid = idc.get_enum_member(enumid, 0, serial, -1)

    # All other constants
    op_type = idc.get_operand_type(arg_ea, op_num)
    if op_type == idaapi.o_imm:
        # only one choice
        if len(arg_enums) == 1:
            enumid = ida_enum.get_enum(arg_enums[0])
            idc.op_enum(arg_ea, op_num, enumid, 0)
            return

        for enum in arg_enums:
            enumid = ida_enum.get_enum(enum)
            constid = get_constant_id(enumid, op_val)
            if constid == idaapi.BADADDR:
                # Not in this enum
                continue
            else:
                # Found the right enum
                idc.op_enum(arg_ea, op_num, enumid, 0)
                return
 def __call__(self):
     emem = ida_enum.get_enum_member_by_name(Event.encode(self.emname))
     cmt = Event.encode(self.cmt if self.cmt else '')
     ida_enum.set_enum_cmt(emem, cmt, self.repeatable_cmt)
示例#7
0
 def __call__(self):
     emem = ida_enum.get_enum_member_by_name(self.emname)
     cmt = self.cmt if self.cmt else ""
     ida_enum.set_enum_cmt(emem, cmt, self.repeatable_cmt)
示例#8
0
 def implement(self):
     id_of_enum_member = ida_enum.get_enum_member_by_name(str(self._id))
     ida_enum.set_enum_member_name(id_of_enum_member, self._value)