Source code for angr.state_plugins.heap.utils
from ...errors import SimSolverError
[docs]def concretize(x, solver, sym_handler):
"""
For now a lot of naive concretization is done when handling heap metadata to keep things manageable. This idiom
showed up a lot as a result, so to reduce code repetition this function uses a callback to handle the one or two
operations that varied across invocations.
:param x: the item to be concretized
:param solver: the solver to evaluate the item with
:param sym_handler: the handler to be used when the item may take on more than one value
:returns: a concrete value for the item
"""
if solver.symbolic(x):
try:
return solver.eval_one(x)
except SimSolverError:
return sym_handler(x)
else:
return solver.eval(x)