1from typing import Optional 2 3from ..errors import SimSolverError 4from . import SimConcretizationStrategy 5 6 7class SimConcretizationStrategyMax(SimConcretizationStrategy): 8 """ 9 Concretization strategy that returns the maximum address. 10 """ 11 12 def __init__(self, max_addr: Optional[int]=None): 13 super().__init__() 14 self._max_addr = max_addr 15 16 def _concretize(self, memory, addr): 17 if self._max_addr is None: 18 return [ self._max(memory, addr) ] 19 else: 20 try: 21 return [ self._max(memory, addr, extra_constraints=(addr <= self._max_addr,)) ] 22 except SimSolverError: 23 return [ self._max(memory, addr) ] 24