Source code for angr.storage.memory_mixins.paged_memory.pages
import typing
from angr.storage.memory_mixins import MemoryMixin
from .cooperation import CooperationBase, MemoryObjectMixin
from .ispo_mixin import ISPOMixin
from .refcount_mixin import RefcountMixin
from .permissions_mixin import PermissionsMixin
from .history_tracking_mixin import HistoryTrackingMixin
[docs]class PageBase(HistoryTrackingMixin, RefcountMixin, CooperationBase, ISPOMixin, PermissionsMixin, MemoryMixin):
"""
This is a fairly succinct definition of the contract between PagedMemoryMixin and its constituent pages:
- Pages must implement the MemoryMixin model for loads, stores, copying, merging, etc
- However, loading/storing may not necessarily use the same data domain as PagedMemoryMixin. In order to do more
efficient loads/stores across pages, we use the CooperationBase interface which allows the page class to
determine how to generate and unwrap the objects which are actually stored.
- To support COW, we use the RefcountMixin and the ISPOMixin (which adds the contract element that ``memory=self``
be passed to every method call)
- Pages have permissions associated with them, stored in the PermissionsMixin.
Read the docstrings for each of the constituent classes to understand the nuances of their functionalities
"""
pass
PageType = typing.TypeVar("PageType", bound=PageBase)
from .list_page import ListPage
from .mv_list_page import MVListPage
from .ultra_page import UltraPage