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)
示例#2
0
    def update_idb(self):
        id = ida_enum.get_enum(self._name)
        if idc.BADADDR == id:
            id = ida_enum.add_enum(idc.BADADDR, self._name, idaapi.decflag())

        keys = self._values.keys()
        keys.sort()

        for k in keys:
            ida_enum.add_enum_member(id, self._values[k], k)
示例#3
0
文件: compat.py 项目: angr/binsync
def set_enum(bs_enum: Enum):
    _enum = ida_enum.get_enum(bs_enum.name)
    if not _enum:
        return False

    ida_enum.del_enum(_enum)
    enum_id = ida_enum.add_enum(ida_enum.get_enum_qty(), bs_enum.name, 0)

    if enum_id is None:
        l.warning(f"IDA failed to create a new enum with {bs_enum.name}")
        return False

    for member_name, value in bs_enum.members.items():
        ida_enum.add_enum_member(enum_id, member_name, value)

    return True
示例#4
0
    def load(infos):
        for info in infos:
            enum_id = ida_enum.get_enum(info['name'])
            if enum_id == BADADDR:
                print('[IDA-Sync] Creating new enum %s.' % info['name'])
                enum_id = ida_enum.add_enum(
                    info['idx'],
                    info['name'],
                    info['flag'],
                )
            else:
                ida_enum.set_enum_idx(enum_id, info['idx'])
                ida_enum.set_enum_flag(enum_id, info['flag'])

            ida_enum.set_enum_width(enum_id, info['width'])

            for member in info['members']:
                ida_enum.add_enum_member(
                    enum_id, member['name'], member['value'])
示例#5
0
文件: bipenum.py 项目: xcode2010/bip
    def add(self, name, value):
        """
            Property for adding a new member to this enum.

            :param str name: The name of the new member to add.
            :param int value: The value of the new member to add.
            :raise RuntimeError: If it was not possible to add the new member.
        """
        if ida_enum.add_enum_member(self._eid, name, value,
                                    ida_enum.DEFMASK) != 0:
            raise RuntimeError(
                "Unable to add new member {} ({}) to enum {}".format(
                    name, value, self.name))
 def __call__(self):
     enum = ida_enum.get_enum(Event.encode(self.ename))
     ida_enum.add_enum_member(enum, Event.encode(self.name), self.value,
                              self.bmask)
示例#7
0
 def __call__(self):
     enum = ida_enum.get_enum(self.ename)
     ida_enum.add_enum_member(enum, self.name, self.value, self.bmask)
示例#8
0
 def implement(self):
     id_of_enum = ida_enum.get_enum(str(self._id))
     ida_enum.add_enum_member(id_of_enum, self._name, long(self._value))
示例#9
0
 def implement(self):
     ida_enum.add_enum_member(self._id, self._name, self._value)