def _normalize_address_type(self, addr): #pylint:disable=no-self-use """ Convert address of different types to a list of mapping between region IDs and offsets (strided intervals). :param claripy.ast.Base addr: Address to convert :return: A list of mapping between region IDs and offsets. :rtype: dict """ addr_e = _raw_ast(addr) if isinstance(addr_e, (claripy.bv.BVV, claripy.vsa.StridedInterval, claripy.vsa.ValueSet)): raise SimMemoryError( '_normalize_address_type() does not take claripy models.') if isinstance(addr_e, claripy.ast.Base): if not isinstance(addr_e._model_vsa, ValueSet): # Convert it to a ValueSet first by annotating it addr_e = addr_e.annotate( RegionAnnotation('global', 0, addr_e._model_vsa)) return addr_e._model_vsa.items() else: raise SimAbstractMemoryError('Unsupported address type %s' % type(addr_e))
def _normalize_address_type(addr: Union[int,Bits], bits) -> Generator[Tuple[str,StridedInterval],None,None]: """ Convert address of different types to a list of mapping between region IDs and offsets (strided intervals). :param addr: Address to convert :return: A list of mapping between region IDs and offsets. :rtype: dict """ if isinstance(addr, int): addr_e = claripy.BVV(addr, bits) else: addr_e = _raw_ast(addr) if isinstance(addr_e, (claripy.bv.BVV, claripy.vsa.StridedInterval, claripy.vsa.ValueSet)): raise SimMemoryError('_normalize_address_type() does not take claripy models.') if isinstance(addr_e, claripy.ast.Base): if not isinstance(addr_e._model_vsa, ValueSet): # Convert it to a ValueSet first by annotating it addr_e = addr_e.annotate(RegionAnnotation('global', 0, addr_e._model_vsa)) for region, offset in addr_e._model_vsa.items(): yield region, offset else: raise SimAbstractMemoryError('Unsupported address type %s' % type(addr_e))