def reg(self): """Name of the register used in the operand.""" if self.type.is_displ or self.type.is_phrase: size = core.get_native_size() return get_register_name(self.reg_id, size) if self.type.is_reg: return get_register_name(self.reg_id, self.size) else: raise exceptions.SarkOperandWithoutReg("Operand does not have a register.")
def __repr__(self): phrase = [] if self.base_id is not None: phrase.append(self.base) if self.index_id is not None: if phrase: phrase.append('+') phrase.append('{index}*{scale}'.format(index=self.index, scale=self.scale)) if self.offset: offset = self.offset sign = '+' if core.is_signed(offset): offset = offset - (1 << (8 * core.get_native_size())) sign = '-' value = '{:X}'.format(abs(offset)) phrase.append('{sign}{prefix}{value}{suffix}'.format(sign=sign if phrase or offset < 0 else '', prefix='0' if value[0].isalpha() else '', value=value, suffix='h' if abs(offset) > 9 else '')) return '[{}]'.format(''.join(phrase))
def get_register_name(reg_id, size=None): if size is None: size = get_native_size() return idaapi.get_reg_name(reg_id, size)