angr.storage.memory_mixins 源代码

from __future__ import annotations

from angr.sim_state import SimState
from .actions_mixin import ActionsMixinHigh, ActionsMixinLow
from .address_concretization_mixin import AddressConcretizationMixin
from .bvv_conversion_mixin import DataNormalizationMixin
from .clouseau_mixin import InspectMixinHigh
from .conditional_store_mixin import ConditionalMixin
from .convenient_mappings_mixin import ConvenientMappingsMixin
from .default_filler_mixin import DefaultFillerMixin, SpecialFillerMixin, ExplicitFillerMixin
from .dirty_addrs_mixin import DirtyAddrsMixin
from .hex_dumper_mixin import HexDumperMixin
from .label_merger_mixin import LabelMergerMixin
from .multi_value_merger_mixin import MultiValueMergerMixin
from .name_resolution_mixin import NameResolutionMixin
from .simplification_mixin import SimplificationMixin
from .simple_interface_mixin import SimpleInterfaceMixin
from .size_resolution_mixin import SizeNormalizationMixin, SizeConcretizationMixin
from .smart_find_mixin import SmartFindMixin
from .symbolic_merger_mixin import SymbolicMergerMixin
from .top_merger_mixin import TopMergerMixin
from .underconstrained_mixin import UnderconstrainedMixin
from .unwrapper_mixin import UnwrapperMixin

from .paged_memory.page_backer_mixins import ClemoryBackerMixin, ConcreteBackerMixin, DictBackerMixin
from .paged_memory.paged_memory_mixin import (
    PagedMemoryMixin,
    ListPagesMixin,
    UltraPagesMixin,
    ListPagesWithLabelsMixin,
    MVListPagesMixin,
    MVListPagesWithLabelsMixin,
)
from .paged_memory.privileged_mixin import PrivilegedPagingMixin
from .paged_memory.stack_allocation_mixin import StackAllocationMixin
from .paged_memory.paged_memory_multivalue_mixin import PagedMemoryMultiValueMixin
from .paged_memory.pages import (
    CooperationBase,
    MemoryObjectMixin,
    ISPOMixin,
    RefcountMixin,
    PermissionsMixin,
    HistoryTrackingMixin,
    PageBase,
    PageType,
    ListPage,
    MVListPage,
    UltraPage,
)

from .slotted_memory import SlottedMemoryMixin
from .regioned_memory import (
    RegionedMemoryMixin,
    RegionCategoryMixin,
    StaticFindMixin,
    AbstractMergerMixin,
    MemoryRegionMetaMixin,
    RegionedAddressConcretizationMixin,
)
from .keyvalue_memory_mixin import KeyValueMemoryMixin
from .javavm_memory_mixin import JavaVmMemoryMixin

# pylint:disable=missing-class-docstring


[文档] class DefaultMemory( HexDumperMixin, SmartFindMixin, UnwrapperMixin, NameResolutionMixin, DataNormalizationMixin, SimplificationMixin, InspectMixinHigh, ActionsMixinHigh, UnderconstrainedMixin, SizeConcretizationMixin, SizeNormalizationMixin, AddressConcretizationMixin, # InspectMixinLow, ActionsMixinLow, ConditionalMixin, ConvenientMappingsMixin, DirtyAddrsMixin, # ----- StackAllocationMixin, ConcreteBackerMixin, ClemoryBackerMixin, DictBackerMixin, PrivilegedPagingMixin, UltraPagesMixin, DefaultFillerMixin, SymbolicMergerMixin, PagedMemoryMixin, ): pass
[文档] class DefaultListPagesMemory( HexDumperMixin, SmartFindMixin, UnwrapperMixin, NameResolutionMixin, DataNormalizationMixin, SimplificationMixin, ActionsMixinHigh, UnderconstrainedMixin, SizeConcretizationMixin, SizeNormalizationMixin, InspectMixinHigh, AddressConcretizationMixin, # InspectMixinLow, ActionsMixinLow, ConditionalMixin, ConvenientMappingsMixin, DirtyAddrsMixin, # ----- StackAllocationMixin, ClemoryBackerMixin, DictBackerMixin, PrivilegedPagingMixin, ListPagesMixin, DefaultFillerMixin, SymbolicMergerMixin, PagedMemoryMixin, ): pass
[文档] class FastMemory( NameResolutionMixin, SimpleInterfaceMixin, SimplificationMixin, InspectMixinHigh, ConditionalMixin, ExplicitFillerMixin, DefaultFillerMixin, SlottedMemoryMixin, ): pass
[文档] class AbstractMemory( UnwrapperMixin, NameResolutionMixin, DataNormalizationMixin, SimplificationMixin, InspectMixinHigh, ActionsMixinHigh, UnderconstrainedMixin, SizeConcretizationMixin, SizeNormalizationMixin, # InspectMixinLow, ActionsMixinLow, ConditionalMixin, RegionedAddressConcretizationMixin, # ----- RegionedMemoryMixin, ): pass
[文档] class RegionedMemory( RegionCategoryMixin, MemoryRegionMetaMixin, StaticFindMixin, UnwrapperMixin, NameResolutionMixin, DataNormalizationMixin, SimplificationMixin, SizeConcretizationMixin, SizeNormalizationMixin, AddressConcretizationMixin, ConvenientMappingsMixin, DirtyAddrsMixin, # ----- ClemoryBackerMixin, DictBackerMixin, UltraPagesMixin, DefaultFillerMixin, AbstractMergerMixin, PagedMemoryMixin, ): pass
[文档] class LabeledMemory( SizeNormalizationMixin, ListPagesWithLabelsMixin, DefaultFillerMixin, TopMergerMixin, LabelMergerMixin, PagedMemoryMixin, ): """ LabeledMemory is used in static analysis. It allows storing values with labels, such as `Definition`. """ def _default_value(self, addr, size, **kwargs): # pylint:disable=arguments-differ # TODO: Make _default_value() a separate Mixin if kwargs.get("name", "").startswith("merge_uc_"): # this is a hack. when this condition is satisfied, _default_value() is called inside Listpage.merge() to # create temporary values. we simply return a TOP value here. return self.state.top(size * self.state.arch.byte_width) # we never fill default values for non-existent loads kwargs["fill_missing"] = False return super()._default_value(addr, size, **kwargs)
[文档] class MultiValuedMemory( SizeNormalizationMixin, MVListPagesMixin, DefaultFillerMixin, MultiValueMergerMixin, PagedMemoryMixin, PagedMemoryMultiValueMixin, ): def _default_value(self, addr, size, **kwargs): # pylint:disable=arguments-differ # TODO: Make _default_value() a separate Mixin if kwargs.get("name", "").startswith("merge_uc_"): # this is a hack. when this condition is satisfied, _default_value() is called inside Listpage.merge() to # create temporary values. we simply return a TOP value here. return self.state.top(size * self.state.arch.byte_width) # we never fill default values for non-existent loads kwargs["fill_missing"] = False return super()._default_value(addr, size, **kwargs)
[文档] class KeyValueMemory( KeyValueMemoryMixin, ): pass
[文档] class JavaVmMemory( JavaVmMemoryMixin, ): pass
SimState.register_default("sym_memory", DefaultMemory) SimState.register_default("fast_memory", FastMemory) SimState.register_default("abs_memory", AbstractMemory) SimState.register_default("keyvalue_memory", KeyValueMemory) SimState.register_default("javavm_memory", JavaVmMemory) __all__ = ( "AbstractMemory", "AbstractMergerMixin", "ActionsMixinHigh", "ActionsMixinLow", "AddressConcretizationMixin", "ClemoryBackerMixin", "ConcreteBackerMixin", "ConditionalMixin", "ConvenientMappingsMixin", "CooperationBase", "DataNormalizationMixin", "DefaultFillerMixin", "DefaultListPagesMemory", "DefaultMemory", "DictBackerMixin", "DirtyAddrsMixin", "ExplicitFillerMixin", "FastMemory", "HexDumperMixin", "HistoryTrackingMixin", "ISPOMixin", "InspectMixinHigh", "JavaVmMemory", "JavaVmMemoryMixin", "KeyValueMemory", "KeyValueMemoryMixin", "LabelMergerMixin", "LabeledMemory", "ListPage", "ListPagesMixin", "ListPagesWithLabelsMixin", "MVListPage", "MVListPagesMixin", "MVListPagesWithLabelsMixin", "MemoryObjectMixin", "MemoryRegionMetaMixin", "MultiValueMergerMixin", "MultiValuedMemory", "NameResolutionMixin", "PageBase", "PageType", "PagedMemoryMixin", "PagedMemoryMultiValueMixin", "PermissionsMixin", "PrivilegedPagingMixin", "RefcountMixin", "RegionCategoryMixin", "RegionedAddressConcretizationMixin", "RegionedMemory", "RegionedMemoryMixin", "SimpleInterfaceMixin", "SimplificationMixin", "SizeConcretizationMixin", "SizeNormalizationMixin", "SlottedMemoryMixin", "SmartFindMixin", "SpecialFillerMixin", "StackAllocationMixin", "StaticFindMixin", "SymbolicMergerMixin", "TopMergerMixin", "UltraPage", "UltraPagesMixin", "UnderconstrainedMixin", "UnwrapperMixin", )