angr.analyses.reaching_definitions.rd_state¶
- class angr.analyses.reaching_definitions.rd_state.ReachingDefinitionsState¶
Bases:
objectRepresents the internal state of the ReachingDefinitionsAnalysis.
It contains a data class LiveDefinitions, which stores both definitions and uses for register, stack, memory, and temporary variables, uncovered during the analysis.
- Parameters:
subject (
Subject) – The subject being analyzed.track_tmps (
bool) – Only tells whether or not temporary variables should be taken into consideration when representing the state of the analysis. Should be set to true when the analysis has counted uses and definitions for temporary variables, false otherwise.analysis (
ReachingDefinitionsAnalysis) – The analysis that generated the state represented by this object.rtoc_value – When the targeted architecture is ppc64, the initial function needs to know the rtoc_value.
live_definitions (
LiveDefinitions|None)canonical_size (
int) – The sizes (in bytes) that objects with an UNKNOWN_SIZE are treated as for operations where sizes are necessary.heap_allocator (
HeapAllocator|None) – Mechanism to model the management of heap memory.environment (
Environment|None) – Representation of the environment of the analyzed program.
- Variables:
arch (
Arch) – The architecture targeted by the program.
- __init__(codeloc, arch, subject, analysis, track_tmps=False, track_consts=False, rtoc_value=None, live_definitions=None, canonical_size=8, heap_allocator=None, environment=None, sp_adjusted=False, all_definitions=None, initializer=None, element_limit=5, merge_into_tops=True)¶
- Parameters:
codeloc (CodeLocation)
arch (Arch)
subject (Subject)
analysis (ReachingDefinitionsAnalysis)
track_tmps (bool)
track_consts (bool)
live_definitions (LiveDefinitions | None)
canonical_size (int)
heap_allocator (HeapAllocator | None)
environment (Environment | None)
sp_adjusted (bool)
all_definitions (set[Definition[A, CodeLoc]] | None)
initializer (RDAStateInitializer | None)
element_limit (int)
merge_into_tops (bool)
- codeloc
- arch: Arch
- analysis
- all_definitions: set[Definition[Any, Any]]
- heap_allocator
- codeloc_uses: set[Definition[Any, Any]]
- exit_observed: bool
- live_definitions
- is_top(*args)¶
- heap_address(offset)¶
- Return type:
- Parameters:
offset (int | HeapAddress)
- annotate_with_def(symvar, definition)¶
- annotate_mv_with_def(mv, definition)¶
- Return type:
MultiValues[TypeVar(MVType, bound=BV|FP)]- Parameters:
mv (MultiValues[MVType])
definition (Definition[A, CodeLoc])
- property tmps¶
- property tmp_uses¶
- property registers: MultiValuedMemory¶
- property register_uses¶
- property stack: MultiValuedMemory¶
- property stack_uses¶
- property heap: MultiValuedMemory¶
- property heap_uses¶
- property memory: MultiValuedMemory¶
- property memory_uses¶
- property others: dict[Atom, MultiValues]¶
- property uses_by_codeloc¶
- property environment¶
- property dep_graph¶
- copy(discard_tmpdefs=False)¶
- Return type:
Self
- compare(other)¶
- Return type:
- Parameters:
other (ReachingDefinitionsState)
- move_codelocs(new_codeloc)¶
- Return type:
- Parameters:
new_codeloc (CodeLocation)
- kill_definitions(atom)¶
Overwrite existing definitions w.r.t ‘atom’ with a dummy definition instance. A dummy definition will not be removed during simplification.
- kill_and_add_definition(atom, data, dummy=False, tags=None, endness=None, annotated=False, uses=None, override_codeloc=None)¶
- Return type:
tuple[MultiValues|None,set[Definition[TypeVar(A, bound=Atom),TypeVar(CodeLoc, bound= CodeLocation | AILCodeLocation)]]]- Parameters:
atom (Atom)
data (MultiValues)
annotated (bool)
uses (set[Definition[A, CodeLoc]] | None)
override_codeloc (CodeLocation | None)
- add_use_by_def(definition, expr=None)¶
- Return type:
- Parameters:
definition (Definition[A, CodeLoc])
expr (Any | None)
- add_tmp_use_by_defs(defs, expr=None)¶
- Return type:
- Parameters:
defs (Iterable[Definition[A, CodeLoc]])
expr (Any | None)
- add_register_use(reg_offset, size, expr=None)¶
- add_register_use_by_defs(defs, expr=None)¶
- Return type:
- Parameters:
defs (Iterable[Definition[A, CodeLoc]])
expr (Any | None)
- add_stack_use(stack_offset, size, expr=None)¶
- add_stack_use_by_defs(defs, expr=None)¶
- Parameters:
defs (Iterable[Definition[A, CodeLoc]])
expr (Any | None)
- add_heap_use(heap_offset, size, expr=None)¶
- add_heap_use_by_defs(defs, expr=None)¶
- Parameters:
defs (Iterable[Definition[A, CodeLoc]])
expr (Any | None)
- add_memory_use_by_def(definition, expr=None)¶
- Parameters:
definition (Definition[A, CodeLoc])
expr (Any | None)
- add_memory_use_by_defs(defs, expr=None)¶
- Parameters:
defs (Iterable[Definition[A, CodeLoc]])
expr (Any | None)
- get_definitions(atom)¶
- Return type:
set[Definition[Atom,TypeVar(CodeLoc, bound= CodeLocation | AILCodeLocation)]]- Parameters:
atom (Atom | Definition[Atom, CodeLoc] | Iterable[Atom] | Iterable[Definition[Atom, CodeLoc]] | MultiValues)
- get_values(spec)¶
- Return type:
- Parameters:
spec (A | Definition[A, CodeLoc] | Iterable[A])
- get_one_value(spec, strip_annotations=False)¶
- Return type:
- Parameters:
spec (A | Definition[A, CodeLoc] | Iterable[A] | Iterable[Definition[A, CodeLoc]])
strip_annotations (bool)
- get_concrete_value(spec, cast_to=<class 'int'>)¶
- Overloads:
self, spec (Atom | Definition[Atom, CodeLoc] | Iterable[Atom]), cast_to (type[int]) → int | None
self, spec (Atom | Definition[Atom, CodeLoc] | Iterable[Atom]), cast_to (type[bytes]) → bytes | None
- Parameters:
- Return type:
- mark_guard(target)¶
- downsize()¶
- deref(pointer, size, endness=Endness.BE)¶
- Overloads:
self, pointer (int | claripy.ast.BV | HeapAddress | SpOffset), size (int | DerefSize), endness (archinfo.Endness) → MemoryLocation | None
self, pointer (MultiValues | A | Definition | Iterable[A] | Iterable[Definition[A, CodeLoc]]), size (int | DerefSize), endness (archinfo.Endness) → set[MemoryLocation]
- Parameters:
pointer (MultiValues[BV] | Atom | Definition[Atom, CodeLoc] | Iterable[Atom] | Iterable[Definition[Atom, CodeLoc]] | int | BV | HeapAddress | SpOffset)
endness (Endness)