angr.storage.memory_mixins¶
- class angr.storage.memory_mixins.AbstractMemory¶
Bases:
UnwrapperMixin,NameResolutionMixin,DataNormalizationMixin,SimplificationMixin,InspectMixin,ActionsMixinHigh,UnderconstrainedMixin,SizeConcretizationMixin,SizeNormalizationMixin,ActionsMixinLow,ConditionalMixin,RegionedAddressConcretizationMixin,RegionedMemoryMixin
- class angr.storage.memory_mixins.AbstractMergerMixin
Bases:
MemoryMixinAbstractMergerMixin handles merging initialized values.
- class angr.storage.memory_mixins.ActionsMixinHigh
Bases:
MemoryMixin- load(addr, size=None, *, condition=None, fallback=None, disable_actions=False, action=None, **kwargs)
- store(addr, data, size=None, *, disable_actions=False, action=None, condition=None, **kwargs)
- class angr.storage.memory_mixins.ActionsMixinLow
Bases:
MemoryMixin- load(addr, size=None, *, action=None, **kwargs)
- store(addr, data, size=None, *, action=None, **kwargs)
- Parameters:
action (SimActionData | None)
- class angr.storage.memory_mixins.AddressConcretizationMixin
Bases:
MemoryMixinThe address concretization mixin allows symbolic reads and writes to be handled sanely by dispatching them as a number of conditional concrete reads/writes. It provides a “concretization strategies” interface allowing the process of serializing symbolic addresses into concrete ones to be specified.
- __init__(read_strategies=None, write_strategies=None, **kwargs)
- concretize_write_addr(addr, strategies=None, condition=None)
Concretizes an address meant for writing.
- Parameters:
addr – An expression for the address.
strategies – A list of concretization strategies (to override the default).
condition – Any extra constraints that should be observed when determining address satisfiability
- Returns:
A list of concrete addresses.
- concretize_read_addr(addr, strategies=None, condition=None)
Concretizes an address meant for reading.
- Parameters:
addr – An expression for the address.
strategies – A list of concretization strategies (to override the default).
- Returns:
A list of concrete addresses.
- load(addr, size=None, *, condition=None, **kwargs)
- store(addr, data, size=None, *, condition=None, **kwargs)
- permissions(addr, permissions=None, **kwargs)
- map_region(addr, length, permissions, **kwargs)
- unmap_region(addr, length, **kwargs)
- class angr.storage.memory_mixins.ClemoryBackerMixin
Bases:
PagedMemoryMixin
- class angr.storage.memory_mixins.ConcreteBackerMixin
Bases:
ClemoryBackerMixin
- class angr.storage.memory_mixins.ConditionalMixin
Bases:
MemoryMixin- load(addr, size=None, *, condition=None, fallback=None, **kwargs)
- store(addr, data, size=None, *, condition=None, **kwargs)
- class angr.storage.memory_mixins.ConvenientMappingsMixin
Bases:
MemoryMixinImplements mappings between names and hashes of symbolic variables and these variables themselves.
- __init__(**kwargs)
- store(addr, data, size=None, **kwargs)
- get_symbolic_addrs()
- addrs_for_name(n)
Returns addresses that contain expressions that contain a variable named n.
- addrs_for_hash(h)
Returns addresses that contain expressions that contain a variable with the hash of h.
- class angr.storage.memory_mixins.CooperationBase
Bases:
GenericAny given subclass of this class which is not a subclass of MemoryMixin should have the property that any subclass it which is a subclass of MemoryMixin should all work with the same datatypes
- class angr.storage.memory_mixins.DataNormalizationMixin
Bases:
MemoryMixinNormalizes the data field for a store and the fallback field for a load to be BVs.
- store(addr, data, size=None, **kwargs)
- load(addr, size=None, *, fallback=None, **kwargs)
- class angr.storage.memory_mixins.DefaultFillerMixin
Bases:
MemoryMixin
- class angr.storage.memory_mixins.DefaultListPagesMemory¶
Bases:
HexDumperMixin,SmartFindMixin,UnwrapperMixin,NameResolutionMixin,DataNormalizationMixin,SimplificationMixin,ActionsMixinHigh,UnderconstrainedMixin,SizeConcretizationMixin,SizeNormalizationMixin,InspectMixin,AddressConcretizationMixin,ActionsMixinLow,ConditionalMixin,ConvenientMappingsMixin,DirtyAddrsMixin,StackAllocationMixin,ClemoryBackerMixin,DictBackerMixin,PrivilegedPagingMixin,ListPagesMixin,DefaultFillerMixin,SymbolicMergerMixin,PagedMemoryMixin
- class angr.storage.memory_mixins.DefaultMemory¶
Bases:
HexDumperMixin,SmartFindMixin,UnwrapperMixin,NameResolutionMixin,DataNormalizationMixin,SimplificationMixin,InspectMixin,ActionsMixinHigh,UnderconstrainedMixin,SizeConcretizationMixin,SizeNormalizationMixin,AddressConcretizationMixin,ActionsMixinLow,ConditionalMixin,ConvenientMappingsMixin,DirtyAddrsMixin,StackAllocationMixin,ConcreteBackerMixin,ClemoryBackerMixin,DictBackerMixin,PrivilegedPagingMixin,UltraPagesMixin,DefaultFillerMixin,SymbolicMergerMixin,PagedMemoryMixin
- class angr.storage.memory_mixins.DictBackerMixin
Bases:
PagedMemoryMixin- __init__(dict_memory_backer=None, **kwargs)
- class angr.storage.memory_mixins.DirtyAddrsMixin
Bases:
MemoryMixin- store(addr, data, size=None, **kwargs)
- class angr.storage.memory_mixins.ExplicitFillerMixin
Bases:
MemoryMixin- __init__(uninitialized_read_handler=None, **kwargs)
- class angr.storage.memory_mixins.FastMemory¶
Bases:
NameResolutionMixin,SimpleInterfaceMixin,SimplificationMixin,InspectMixin,ConditionalMixin,ExplicitFillerMixin,DefaultFillerMixin,SlottedMemoryMixin
- class angr.storage.memory_mixins.HexDumperMixin
Bases:
MemoryMixin- hex_dump(start, size, word_size=4, words_per_row=4, endianness='Iend_BE', symbolic_char='?', unprintable_char='.', solve=False, extra_constraints=None, inspect=False, disable_actions=True)
Returns a hex dump as a string. The solver, if enabled, is called once for every byte potentially making this function very slow. It is meant to be used mainly as a “visualization” for debugging.
Warning: May read and display more bytes than size due to rounding. Particularly, if size is less than, or not a multiple of word_size*words_per_line.
- Parameters:
start – starting address from which to print
size – number of bytes to display
word_size – number of bytes to group together as one space-delimited unit
words_per_row – number of words to display per row of output
endianness – endianness to use when displaying each word (ASCII representation is unchanged)
symbolic_char – the character to display when a byte is symbolic and has multiple solutions
unprintable_char – the character to display when a byte is not printable
solve – whether or not to attempt to solve (warning: can be very slow)
extra_constraints – extra constraints to pass to the solver is solve is True
inspect – whether or not to trigger SimInspect breakpoints for the memory load
disable_actions – whether or not to disable SimActions for the memory load
- Returns:
hex dump as a string
- class angr.storage.memory_mixins.HistoryTrackingMixin
Bases:
RefcountMixin,MemoryMixinTracks the history of memory writes.
- __init__(*args, **kwargs)
- store(addr, data, size=None, **kwargs)
- parents()
- all_bytes_changed_in_history()
- Return type:
SegmentList
- class angr.storage.memory_mixins.ISPOMixin
Bases:
MemoryMixinAn implementation of the International Stateless Persons Organisation, a mixin which should be applied as a bottom layer for memories which have no state and must redirect certain operations to a parent memory. Main usecase is for memory region classes which are stored within other memories, such as pages.
- class angr.storage.memory_mixins.InspectMixin
Bases:
MemoryMixinThis mixin adds support for the inspect plugin to the memory model.
Inspect breakpoints are called for the following events:
mem_read (before and after)
mem_write (before and after)
reg_read (before and after)
reg_write (before and after)
address_concretization_add_constraints (before)
- store(addr, data, size=None, *, condition=None, endness=None, inspect=True, **kwargs)
- load(addr, size=None, *, condition=None, endness=None, inspect=True, **kwargs)
- class angr.storage.memory_mixins.JavaVmMemory¶
Bases:
JavaVmMemoryMixin
- class angr.storage.memory_mixins.JavaVmMemoryMixin
Bases:
MemoryMixinA memory mixin for JavaVM memory.
- __init__(memory_id='mem', stack=None, heap=None, vm_static_table=None, load_strategies=None, store_strategies=None, max_array_size=1000, **kwargs)
- static get_new_uuid()
Generate a unique id within the scope of the JavaVM memory. This, for example, is used for distinguishing memory objects of the same type (e.g. multiple instances of the same class).
- store(addr, data, frame=0)
- load(addr, frame=0, none_if_missing=False)
- push_stack_frame()
- pop_stack_frame()
- property stack
- store_array_element(array, idx, value)
- store_array_elements(array, start_idx, data)
Stores either a single element or a range of elements in the array.
- Parameters:
array – Reference to the array.
start_idx – Starting index for the store.
data – Either a single value or a list of values.
- load_array_element(array, idx)
- load_array_elements(array, start_idx, no_of_elements)
Loads either a single element or a range of elements from the array.
- Parameters:
array – Reference to the array.
start_idx – Starting index for the load.
no_of_elements – Number of elements to load.
- concretize_store_idx(idx, strategies=None)
Concretizes a store index.
- Parameters:
idx – An expression for the index.
strategies – A list of concretization strategies (to override the default).
min_idx – Minimum value for a concretized index (inclusive).
max_idx – Maximum value for a concretized index (exclusive).
- Returns:
A list of concrete indexes.
- concretize_load_idx(idx, strategies=None)
Concretizes a load index.
- Parameters:
idx – An expression for the index.
strategies – A list of concretization strategies (to override the default).
min_idx – Minimum value for a concretized index (inclusive).
max_idx – Maximum value for a concretized index (exclusive).
- Returns:
A list of concrete indexes.
- class angr.storage.memory_mixins.KeyValueMemory¶
Bases:
KeyValueMemoryMixin
- class angr.storage.memory_mixins.KeyValueMemoryMixin
Bases:
MemoryMixinKeyValueMemoryMixin is a mixin that provides a simple key-value store for memory.
- __init__(*args, **kwargs)
- load(addr, size=None, none_if_missing=False, **kwargs)
- store(addr, data, type_=None, **kwargs)
- class angr.storage.memory_mixins.LabelMergerMixin
Bases:
MemoryMixinA memory mixin for merging labels. Labels come from SimLabeledMemoryObject.
- __init__(*args, **kwargs)
- class angr.storage.memory_mixins.LabeledMemory¶
Bases:
SizeNormalizationMixin,ListPagesWithLabelsMixin,DefaultFillerMixin,TopMergerMixin,LabelMergerMixin,PagedMemoryMixinLabeledMemory is used in static analysis. It allows storing values with labels, such as Definition.
- class angr.storage.memory_mixins.ListPage
Bases:
MemoryObjectMixin,PageBaseThis class implements a page memory mixin with lists as the main content store.
- __init__(memory=None, content=None, sinkhole=None, mo_cmp=None, **kwargs)
- load(addr, size=None, endness=None, page_addr=None, memory=None, cooperate=False, **kwargs)
- store(addr, data, size=None, endness=None, memory=None, cooperate=False, **kwargs)
- class angr.storage.memory_mixins.ListPagesMixin
Bases:
PagedMemoryMixin- PAGE_TYPE
alias of
ListPage
- class angr.storage.memory_mixins.ListPagesWithLabelsMixin
Bases:
LabeledPagesMixin,ListPagesMixin
- class angr.storage.memory_mixins.MVListPage
Bases:
MemoryObjectSetMixin,PageBaseMVListPage allows storing multiple values at the same location.
Each store() may take a value or multiple values. Each load() returns an iterator of all values stored at that location.
- __init__(memory=None, content=None, sinkhole=None, mo_cmp=None, **kwargs)
- load(addr, size=None, endness=None, page_addr=None, memory=None, cooperate=False, **kwargs)
- Return type:
- store(addr, data, size=None, endness=None, memory=None, cooperate=False, **kwargs)
- compare(other, page_addr=None, memory=None, changed_offsets=None)
- Return type:
- Parameters:
other (MVListPage)
page_addr (int | None)
- changed_bytes(other, page_addr=None)
- Parameters:
other (MVListPage)
page_addr (int | None)
- content_gen(index)
- class angr.storage.memory_mixins.MVListPagesMixin
Bases:
PagedMemoryMixin- PAGE_TYPE
alias of
MVListPage
- __init__(*args, skip_missing_values_during_merging=False, **kwargs)
- class angr.storage.memory_mixins.MVListPagesWithLabelsMixin
Bases:
LabeledPagesMixin,MVListPagesMixin
- class angr.storage.memory_mixins.MemoryObjectMixin
Bases:
CooperationBase[SimMemoryObject]Uses SimMemoryObjects in region storage. With this, load will return a list of tuple (address, MO) and store will take a MO.
- class angr.storage.memory_mixins.MemoryRegionMetaMixin
Bases:
MemoryMixin- __init__(related_function_addr=None, **kwargs)
- property is_stack
- property related_function_addr
- get_abstract_locations(addr, size)
Get a list of abstract locations that is within the range of [addr, addr + size]
This implementation is pretty slow. But since this method won’t be called frequently, we can live with the bad implementation for now.
- Parameters:
addr – Starting address of the memory region.
size – Size of the memory region, in bytes.
- Returns:
A list of covered AbstractLocation objects, or an empty list if there is none.
- store(addr, data, size=None, *, bbl_addr=None, stmt_id=None, ins_addr=None, endness=None, **kwargs)
- load(addr, size=None, *, bbl_addr=None, stmt_idx=None, ins_addr=None, **kwargs)
- dbg_print(indent=0)
Print out debugging information
- class angr.storage.memory_mixins.MultiValueMergerMixin
Bases:
MemoryMixin- __init__(*args, element_limit=5, annotation_limit=256, top_func=None, is_top_func=None, phi_maker=None, merge_into_top=True, **kwargs)
- class angr.storage.memory_mixins.MultiValuedMemory¶
Bases:
SizeNormalizationMixin,MVListPagesMixin,DefaultFillerMixin,MultiValueMergerMixin,PagedMemoryMixin,PagedMemoryMultiValueMixin
- class angr.storage.memory_mixins.NameResolutionMixin
Bases:
MemoryMixinThis mixin allows you to provide register names as load addresses, and will automatically translate this to an offset and size.
- store(addr, data, size=None, **kwargs)
- load(addr, size=None, **kwargs)
- class angr.storage.memory_mixins.PageBase
Bases:
HistoryTrackingMixin,RefcountMixin,CooperationBase,ISPOMixin,PermissionsMixin,MemoryMixinThis 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=selfbe 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
- class angr.storage.memory_mixins.PagedMemoryMixin
Bases:
MemoryMixin[int|BV|SimActionObject,BV,int|BV|SimActionObject],GenericA bottom-level storage mechanism. Dispatches reads to individual pages, the type of which is the PAGE_TYPE class variable.
- PAGE_TYPE: type[PageType]
- __init__(page_size=4096, default_permissions=3, permissions_map=None, page_kwargs=None, **kwargs)
- compare(other)
- Return type:
- Parameters:
other (PagedMemoryMixin)
- permissions(addr, permissions=None, **kwargs)
- map_region(addr, length, permissions, *, init_zero=False, **kwargs)
- unmap_region(addr, length, **kwargs)
- flush_pages(white_list)
Flush all pages not included in the white_list by removing their pages. Note, this will not wipe them from memory if they were backed by a memory_backer, it will simply reset them to their initial state. Returns the list of pages that were cleared consisting of (addr, length) tuples. :type white_list: :param white_list: white list of regions in the form of (start, end) to exclude from the flush :return: a list of memory page ranges that were flushed :rtype: list
- class angr.storage.memory_mixins.PagedMemoryMultiValueMixin
Bases:
MemoryMixinImplement optimizations and fast accessors for the MultiValues-variant of Paged Memory.
- class angr.storage.memory_mixins.PermissionsMixin
Bases:
MemoryMixinThis mixin adds a permissions_bits field and properties for extracting the read/write/exec permissions. It does NOT add permissions checking.
- property perm_read
- property perm_write
- property perm_exec
- class angr.storage.memory_mixins.PrivilegedPagingMixin
Bases:
PagedMemoryMixinA mixin for paged memory models which will raise SimSegfaultExceptions if STRICT_PAGE_ACCESS is enabled and a segfault condition is detected.
Segfault conditions include: - getting a page for reading which is non-readable - getting a page for writing which is non-writable - creating a page
The latter condition means that this should be inserted under any mixins which provide other implementations of
_initialize_page.
- class angr.storage.memory_mixins.RefcountMixin
Bases:
MemoryMixinThis mixin adds a locked reference counter and methods to manipulate it, to facilitate copy-on-write optimizations.
- __init__(**kwargs)
- acquire_unique()
Call this function to return a version of this page which can be used for writing, which may or may not be the same object as before. If you use this you must immediately replace the shared reference you previously had with the new unique copy.
- acquire_shared()
Call this function to indicate that this page has had a reference added to it and must be copied before it can be acquired uniquely again. Creating the object implicitly starts it with one shared reference.
- Return type:
- release_shared()
Call this function to indicate that this page has had a shared reference to it released
- Return type:
- class angr.storage.memory_mixins.RegionCategoryMixin
Bases:
MemoryMixin- property category
reg, mem, or file.
- Type:
Return the category of this SimMemory instance. It can be one of the three following categories
- class angr.storage.memory_mixins.RegionedAddressConcretizationMixin
Bases:
MemoryMixin- __init__(read_strategies=None, write_strategies=None, **kwargs)
- class angr.storage.memory_mixins.RegionedMemory¶
Bases:
RegionCategoryMixin,MemoryRegionMetaMixin,StaticFindMixin,UnwrapperMixin,NameResolutionMixin,DataNormalizationMixin,SimplificationMixin,SizeConcretizationMixin,SizeNormalizationMixin,AddressConcretizationMixin,ConvenientMappingsMixin,DirtyAddrsMixin,ClemoryBackerMixin,DictBackerMixin,UltraPagesMixin,DefaultFillerMixin,AbstractMergerMixin,PagedMemoryMixin
- class angr.storage.memory_mixins.RegionedMemoryMixin
Bases:
MemoryMixinRegioned memory. This mixin manages multiple memory regions. Each address is represented as a tuple of (region ID, offset into the region), which is called a regioned address.
Converting absolute addresses into regioned addresses: We map an absolute address to a region by looking up which region this address belongs to in the region map. Currently this is only enabled for stack. Heap support has not landed yet.
When start analyzing a function, the user should call set_stack_address_mapping() to create a new region mapping. Likewise, when exiting from a function, the user should cancel the previous mapping by calling unset_stack_address_mapping().
- __init__(write_targets_limit=2048, read_targets_limit=4096, stack_region_map=None, generic_region_map=None, stack_size=65536, cle_memory_backer=None, dict_memory_backer=None, regioned_memory_cls=None, **kwargs)
- load(addr, size=None, *, endness=None, condition=None, **kwargs)
- store(addr, data, size=None, *, endness=None, **kwargs)
- Parameters:
size (int | None)
- set_stack_address_mapping(absolute_address, region_id, related_function_address=None)
Create a new mapping between an absolute address (which is the base address of a specific stack frame) and a region ID.
- unset_stack_address_mapping(absolute_address)
Remove a stack mapping.
- Parameters:
absolute_address (
int) – An absolute memory address that is the base address of the stack frame to destroy.
- stack_id(function_address)
Return a memory region ID for a function. If the default region ID exists in the region mapping, an integer will appended to the region name. In this way we can handle recursive function calls, or a function that appears more than once in the call frame.
This also means that stack_id() should only be called when creating a new stack frame for a function. You are not supposed to call this function every time you want to map a function address to a stack ID.
- set_stack_size(size)
- Parameters:
size (int)
- class angr.storage.memory_mixins.SimpleInterfaceMixin
Bases:
MemoryMixin- load(addr, size=None, *, endness=None, condition=None, fallback=None, **kwargs)
- store(addr, data, size=None, *, endness=None, condition=None, **kwargs)
- class angr.storage.memory_mixins.SimplificationMixin
Bases:
MemoryMixin- store(addr, data, size=None, **kwargs)
- class angr.storage.memory_mixins.SizeConcretizationMixin
Bases:
MemoryMixinThis mixin allows memory to process symbolic sizes. It will not touch any sizes which are not ASTs with non-BVV ops. Assumes that the data is a BV.
symbolic load sizes will be concretized as their maximum and a warning will be logged
symbolic store sizes will be dispatched as several conditional stores with concrete sizes
- __init__(concretize_symbolic_write_size=False, max_concretize_count=256, max_symbolic_size=4194304, raise_memory_limit_error=False, size_limit=257, **kwargs)
- load(addr, size=None, **kwargs)
- store(addr, data, size=None, *, condition=None, **kwargs)
- class angr.storage.memory_mixins.SizeNormalizationMixin
Bases:
MemoryMixinProvides basic services related to normalizing sizes. After this mixin, sizes will always be a plain int. Assumes that the data is a BV.
load will throw a TypeError if no size is provided
store will default to len(data)//byte_width if no size is provided
- load(addr, size=None, **kwargs)
- store(addr, data, size=None, **kwargs)
- class angr.storage.memory_mixins.SlottedMemoryMixin
Bases:
MemoryMixin- __init__(width=None, **kwargs)
- load(addr, size=None, *, endness=None, **kwargs)
- store(addr, data, size=None, *, endness=None, **kwargs)
- changed_bytes(other)
- class angr.storage.memory_mixins.SmartFindMixin
Bases:
MemoryMixinMemory mixin providing basic searching over concrete and symbolic data.
- find(addr, data, max_search, *, default=None, endness=None, chunk_size=None, max_symbolic_bytes=None, condition=None, char_size=1, **kwargs)
- class angr.storage.memory_mixins.SpecialFillerMixin
Bases:
MemoryMixin- __init__(special_memory_filler=None, **kwargs)
- class angr.storage.memory_mixins.StackAllocationMixin
Bases:
PagedMemoryMixinThis mixin adds automatic allocation for a stack region based on the stack_end and stack_size parameters.
- __init__(stack_end=None, stack_size=None, stack_perms=None, **kwargs)
- allocate_stack_pages(addr, size, **kwargs)
Pre-allocates pages for the stack without triggering any logic related to reading from them.
- class angr.storage.memory_mixins.StaticFindMixin
Bases:
SmartFindMixinImplements data finding for abstract memory.
- find(addr, data, max_search, *, default=None, endness=None, chunk_size=None, max_symbolic_bytes=None, condition=None, char_size=1, **kwargs)
- class angr.storage.memory_mixins.SymbolicMergerMixin
Bases:
MemoryMixin
- class angr.storage.memory_mixins.TopMergerMixin
Bases:
MemoryMixinA memory mixin for merging values in memory to TOP.
- __init__(*args, top_func=None, **kwargs)
- class angr.storage.memory_mixins.UltraPage
Bases:
MemoryObjectMixin,PageBaseDefault page implementation
- __init__(memory=None, init_zero=False, **kwargs)
- classmethod new_from_shared(data, memory=None, **kwargs)
- load(addr, size=None, page_addr=None, endness=None, memory=None, cooperate=False, **kwargs)
- store(addr, data, size=None, endness=None, memory=None, page_addr=None, cooperate=False, **kwargs)
- Parameters:
data (int | SimMemoryObject)
size (int | None)
- class angr.storage.memory_mixins.UltraPagesMixin
Bases:
PagedMemoryMixin- PAGE_TYPE
alias of
UltraPage
- class angr.storage.memory_mixins.UnderconstrainedMixin
Bases:
MemoryMixin- __init__(*args, **kwargs)
- load(addr, size=None, **kwargs)
- store(addr, data, size=None, **kwargs)
- class angr.storage.memory_mixins.UnwrapperMixin
Bases:
MemoryMixinThis mixin processes SimActionObjects by passing on their .ast field.
- store(addr, data, size=None, *, condition=None, **kwargs)
- load(addr, size=None, *, condition=None, fallback=None, **kwargs)
- find(addr, data, max_search, *, default=None, **kwargs)
Submodules