Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for angr.concretization_strategies.norepeats_range
from . import SimConcretizationStrategy
from ..errors import SimMergeError
[docs] class SimConcretizationStrategyNorepeatsRange ( SimConcretizationStrategy ):
"""
Concretization strategy that resolves a range, with no repeats.
"""
[docs] def __init__ ( self , repeat_expr , min = None , granularity = None , ** kwargs ): # pylint:disable=redefined-builtin
super () . __init__ ( ** kwargs )
self . _repeat_expr = repeat_expr
self . _repeat_min = min
self . _repeat_granularity = granularity
def _concretize ( self , memory , addr , ** kwargs ):
child_constraints = ( addr >= self . _repeat_min , addr < self . _repeat_min + self . _repeat_granularity )
extra_constraints = kwargs . pop ( "extra_constraints" , None )
if extra_constraints is not None :
child_constraints += tuple ( extra_constraints )
c = self . _any ( memory , addr , extra_constraints = child_constraints )
self . _repeat_min = c + self . _repeat_granularity
return [ c ]
[docs] def copy ( self ):
return SimConcretizationStrategyNorepeatsRange (
repeat_expr = self . _repeat_expr , min = self . _repeat_min , granularity = self . _repeat_granularity , exact = self . _exact
)
[docs] def merge ( self , others ):
if not all ( self . _repeat_expr is o . _repeat_expr for o in others ):
raise SimMergeError ( "Unable to merge two different repeat expressions." )
self . _repeat_min = max ( self . _repeat_min , max ( o . _repeat_min for o in others ))
self . _repeat_granularity = max ( self . _repeat_granularity , max ( o . _repeat_granularity for o in others ))