Source code for angr.state_plugins.globals
import logging
from .plugin import SimStatePlugin
l = logging.getLogger(name=__name__)
[docs]class SimStateGlobals(SimStatePlugin):
def __init__(self, backer=None):
super().__init__()
self._backer = backer if backer is not None else {}
[docs] def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
for other in others:
for k in other.keys():
if k not in self:
self[k] = other[k]
return True
[docs] def widen(self, others): # pylint: disable=unused-argument
l.warning("Widening is unimplemented for globals")
return False
def __getitem__(self, k):
return self._backer[k]
def __setitem__(self, k, v):
self._backer[k] = v
def __delitem__(self, k):
del self._backer[k]
def __contains__(self, k):
return k in self._backer
@SimStatePlugin.memo
def copy(self, memo): # pylint: disable=unused-argument
return SimStateGlobals(dict(self._backer))
from angr.sim_state import SimState
SimState.register_default("globals", SimStateGlobals)