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)
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)
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)
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)
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)