angr.concretization_strategies.max 源代码
from __future__ import annotations
from angr.errors import SimSolverError
from .base import SimConcretizationStrategy
[文档]
class SimConcretizationStrategyMax(SimConcretizationStrategy):
"""
Concretization strategy that returns the maximum address.
"""
[文档]
def __init__(self, max_addr: int | None = None):
super().__init__()
self._max_addr = max_addr
def _concretize(self, memory, addr, **kwargs):
extra_constraints = kwargs.pop("extra_constraints", None)
extra_constraints = tuple(extra_constraints) if extra_constraints is not None else ()
if self._max_addr is None:
return [self._max(memory, addr, extra_constraints=extra_constraints, **kwargs)]
try:
child_constraints = (addr <= self._max_addr, *extra_constraints)
return [self._max(memory, addr, extra_constraints=child_constraints)]
except SimSolverError:
return [self._max(memory, addr, extra_constraints=extra_constraints, **kwargs)]