Source code for angr.exploration_techniques.memory_watcher

from . import ExplorationTechnique
import psutil


[docs]class MemoryWatcher(ExplorationTechnique): """Memory Watcher Args: min_memory (int,optional): Minimum amount of free memory in MB before stopping execution (default: 95% memory use) memory_stash (str, optional): What to call the low memory stash (default: 'lowmem') At each step, keep an eye on how much memory is left on the system. Stash off states to effectively stop execution if we're below a given threshold. """
[docs] def __init__(self, min_memory=512, memory_stash="lowmem"): super().__init__() if min_memory is not None: self.min_memory = 1024 * 1024 * min_memory else: self.min_memory = int(psutil.virtual_memory().total * 0.05) self.memory_stash = memory_stash
[docs] def setup(self, simgr): if self.memory_stash not in simgr.stashes: simgr.stashes[self.memory_stash] = []
[docs] def step(self, simgr, stash="active", **kwargs): if psutil.virtual_memory().available <= self.min_memory: simgr.move(from_stash="active", to_stash=self.memory_stash) else: simgr = simgr.step(stash=stash, **kwargs) return simgr