Source code for angr.analyses.reaching_definitions

from typing import Set, Optional, Union, TYPE_CHECKING

from ...knowledge_plugins.key_definitions import LiveDefinitions
from .. import register_analysis
from .reaching_definitions import ReachingDefinitionsAnalysis


if TYPE_CHECKING:
    from angr.knowledge_plugins.key_definitions.definition import Definition
    from angr.storage.memory_object import SimMemoryObject
    from angr.storage.memory_mixins import MultiValuedMemory
    from angr.storage.memory_mixins.paged_memory.pages import MVListPage


[docs]def get_all_definitions(region: "MultiValuedMemory") -> Set["Definition"]: all_defs: Set["Definition"] = set() # MultiValuedMemory only uses ListPage internally for page in region._pages.values(): page: "MVListPage" for idx in page.stored_offset: cnt_set: Optional[Union["SimMemoryObject", Set["SimMemoryObject"]]] = page.content[idx] if cnt_set is None: continue elif type(cnt_set) is not set: cnt_set = {cnt_set} for cnt in cnt_set: for def_ in LiveDefinitions.extract_defs(cnt.object): all_defs.add(def_) return all_defs
register_analysis(ReachingDefinitionsAnalysis, "ReachingDefinitions")