angr.knowledge_plugins.key_definitions.live_definitions

class angr.knowledge_plugins.key_definitions.live_definitions.DerefSize

Bases: Enum

An enum for specialized kinds of dereferences

NULL_TERMINATE - Dereference until the first byte which could be a literal null. Return a value including the

terminator.

NULL_TERMINATE = 1
class angr.knowledge_plugins.key_definitions.live_definitions.DefinitionAnnotation

Bases: Annotation

An annotation that attaches a Definition to an AST.

__init__(definition)
definition
property relocatable

Returns whether this annotation can be relocated in a simplification.

Returns:

True if it can be relocated, false otherwise.

property eliminatable

Returns whether this annotation can be eliminated in a simplification.

Returns:

True if eliminatable, False otherwise

class angr.knowledge_plugins.key_definitions.live_definitions.LiveDefinitions

Bases: object

A LiveDefinitions instance contains definitions and uses for register, stack, memory, and temporary variables, uncovered during the analysis.

INITIAL_SP_16BIT = 32512
INITIAL_SP_32BIT = 2147418112
INITIAL_SP_64BIT = 140737488289792
__init__(arch, track_tmps=False, canonical_size=8, registers=None, stack=None, memory=None, heap=None, tmps=None, others=None, register_uses=None, stack_uses=None, heap_uses=None, memory_uses=None, tmp_uses=None, other_uses=None, element_limit=5, merge_into_tops=True)
Parameters:
project: Project | None
arch
track_tmps
registers: MultiValuedMemory
stack: MultiValuedMemory
memory: MultiValuedMemory
heap: MultiValuedMemory
tmps: dict[int, set[Definition]]
others: dict[Atom, MultiValues]
register_uses
stack_uses
heap_uses
memory_uses
tmp_uses: dict[int, set[CodeLocation]]
other_uses
uses_by_codeloc: dict[CodeLocation, set[Definition]]
copy(discard_tmpdefs=False)
Return type:

LiveDefinitions

reset_uses()
static top(bits)

Get a TOP value.

Parameters:

bits (int) – Width of the TOP value (in bits).

Returns:

The TOP value.

static is_top(expr)

Check if the given expression is a TOP value.

Parameters:

expr – The given expression.

Return type:

bool

Returns:

True if the expression is TOP, False otherwise.

stack_address(offset)
Return type:

BV

Parameters:

offset (int)

static is_stack_address(addr)
Return type:

bool

Parameters:

addr (Base)

static get_stack_offset(addr, had_stack_base=False)
Return type:

int | None

Parameters:

addr (Base)

static annotate_with_def(symvar, definition)
Parameters:
Return type:

TypeVar(MVType, bound= BV | FP)

Returns:

static extract_defs(symvar)
Return type:

Generator[Definition]

Parameters:

symvar (Base)

static extract_defs_from_annotations(annos)
Return type:

set[Definition]

Parameters:

annos (Iterable[Annotation])

static extract_defs_from_mv(mv)
Return type:

Generator[Definition]

Parameters:

mv (MultiValues)

get_sp()

Return the concrete value contained by the stack pointer.

Return type:

int

get_sp_offset()

Return the offset of the stack pointer.

Return type:

int | None

get_stack_address(offset)
Return type:

int | None

Parameters:

offset (Base)

stack_offset_to_stack_addr(offset)
Return type:

int

merge(*others)
Return type:

tuple[LiveDefinitions, bool]

Parameters:

others (LiveDefinitions)

compare(other)
Return type:

bool

Parameters:

other (LiveDefinitions)

kill_definitions(atom)

Overwrite existing definitions w.r.t ‘atom’ with a dummy definition instance. A dummy definition will not be removed during simplification.

Parameters:

atom (Atom)

Return type:

None

Returns:

None

kill_and_add_definition(atom, code_loc, data, dummy=False, tags=None, endness=None, annotated=False)
Return type:

MultiValues | None

Parameters:
add_use(atom, code_loc, expr=None)
Return type:

None

Parameters:
add_use_by_def(definition, code_loc, expr=None)
Return type:

None

Parameters:
get_definitions(thing)
get_tmp_definitions(tmp_idx)
Return type:

set[Definition]

Parameters:

tmp_idx (int)

get_register_definitions(reg_offset, size)
Return type:

set[Definition]

Parameters:
get_stack_values(stack_offset, size, endness)
Return type:

MultiValues | None

Parameters:
  • stack_offset (int)

  • size (int)

  • endness (str)

get_stack_definitions(stack_offset, size)
Return type:

set[Definition]

Parameters:
  • stack_offset (int)

  • size (int)

get_heap_definitions(heap_addr, size)
Return type:

set[Definition]

Parameters:
get_memory_definitions(addr, size)
Return type:

set[Definition]

Parameters:
get_values(spec, endness=None)
get_one_value(spec, strip_annotations=False)
get_concrete_value(spec, cast_to=<class 'int'>)
Overloads:
  • self, spec (A | Definition[A] | Iterable[A] | Iterable[Definition[A]]), cast_to (type[int]) → int | None

  • self, spec (A | Definition[A] | Iterable[A] | Iterable[Definition[A]]), cast_to (type[bytes]) → bytes | None

add_register_use(reg_offset, size, code_loc, expr=None)
Return type:

None

Parameters:
add_register_use_by_def(def_, code_loc, expr=None)
Return type:

None

Parameters:
add_stack_use(atom, code_loc, expr=None)
Return type:

None

Parameters:
add_stack_use_by_def(def_, code_loc, expr=None)
Return type:

None

Parameters:
add_heap_use(atom, code_loc, expr=None)
Return type:

None

Parameters:
add_heap_use_by_def(def_, code_loc, expr=None)
Return type:

None

Parameters:
add_memory_use(atom, code_loc, expr=None)
Return type:

None

Parameters:
add_memory_use_by_def(def_, code_loc, expr=None)
Return type:

None

Parameters:
add_tmp_use(atom, code_loc)
Return type:

None

Parameters:
add_tmp_use_by_def(def_, code_loc)
Return type:

None

Parameters:
deref(pointer, size, endness=Endness.BE)
Overloads:
  • self, pointer (MultiValues[claripy.ast.BV] | Atom | Definition[Atom] | Iterable[Atom] | Iterable[Definition[Atom]]), size (int | DerefSize), endness (archinfo.Endness) → set[MemoryLocation]

  • self, pointer (int | claripy.ast.BV | HeapAddress | SpOffset), size (int | DerefSize), endness (archinfo.Endness) → MemoryLocation | None

static is_heap_address(addr)
Return type:

bool

Parameters:

addr (Base)

static get_heap_offset(addr)
Return type:

int | None

Parameters:

addr (Base)

heap_address(offset)
Return type:

BV

Parameters:

offset (int | HeapAddress)