angr.ailment.expression

AIL Expression classes.

AIL expression instances are angr.rustylib.ailment.Expression – a single Rust pyclass wrapping the AilExpression enum. The per-variant classes in this module (Const, BinaryOp, Load, …) are Python-side marker classes:

  • Each marker’s __new__ calls one of the Expression._new_* factory static methods and returns the resulting Expression instance.

  • A metaclass on each marker makes isinstance(x, Const) work by dispatching on the variant tag (Expression.kind). The _AilMarkerMeta checks the tag.

  • For static type checkers each marker name is aliased to the Expression pyclass itself.

  • Python-side subclassing of these markers is not supported.

class angr.ailment.expression.ITE

Bases: object

Marker for Expression instances whose variant is ITE.

static __new__(cls, idx, cond, iffalse, iftrue, **tags)
Return type:

Expression

class angr.ailment.expression.Array

Bases: object

Marker for Expression instances whose variant is Array.

static __new__(cls, idx, elements, bits, **tags)
Return type:

Expression

class angr.ailment.expression.Atom

Bases: object

Marker class for isinstance(x, Atom) checks.

class angr.ailment.expression.BasePointerOffset

Bases: object

Marker for Expression instances whose variant is BasePointerOffset.

static __new__(cls, idx, bits, base, offset, **tags)
Return type:

Expression

class angr.ailment.expression.BinaryOp

Bases: object

Marker for Expression instances whose variant is BinaryOp.

COMPARISON_NEGATION = {'CmpEQ': 'CmpNE', 'CmpGE': 'CmpLT', 'CmpGT': 'CmpLE', 'CmpLE': 'CmpGT', 'CmpLT': 'CmpGE', 'CmpNE': 'CmpEQ'}
static __new__(cls, idx, op, operands, signed=False, *, bits=None, floating_point=False, rounding_mode=None, vector_count=None, vector_size=None, **tags)
Return type:

Expression

class angr.ailment.expression.Call

Bases: object

Marker for Expression instances whose variant is Call.

isinstance also matches Macro / FunctionLikeMacro instances to preserve the former subclass relationships.

static __new__(cls, idx, target, args=None, bits=None, arg_vvars=None, **tags)
Return type:

Expression

class angr.ailment.expression.ComboRegister

Bases: object

Marker for Expression instances whose variant is ComboRegister.

static __new__(cls, idx, registers, **tags)
Return type:

Expression

class angr.ailment.expression.Const

Bases: object

Marker for Expression instances whose variant is Const.

Const(idx, value, bits, **tags) returns an Expression – the marker class is not in the instance’s MRO.

static __new__(cls, idx, value, bits, **tags)
Return type:

Expression

class angr.ailment.expression.Convert

Bases: object

Marker for Expression instances whose variant is Convert.

TYPE_INT = <ConvertType.TYPE_INT: 0>
TYPE_FP = <ConvertType.TYPE_FP: 1>
static __new__(cls, idx, from_bits, to_bits, is_signed, operand, from_type=None, to_type=None, rounding_mode=None, **tags)
Return type:

Expression

class angr.ailment.expression.ConvertType

Bases: object

Mirrors angr.ailment.expression.ConvertType (Enum).

TYPE_FP = <ConvertType.TYPE_FP: 1>
TYPE_INT = <ConvertType.TYPE_INT: 0>
name
value
class angr.ailment.expression.DirtyExpression

Bases: object

Marker for Expression instances whose variant is DirtyExpression.

static __new__(cls, idx, callee, operands, *, guard=None, mfx=None, maddr=None, msize=None, bits, **tags)
Return type:

Expression

class angr.ailment.expression.Expression

Bases: object

Marker for isinstance(x, Expression) checks.

Real AIL expression instances are angr.rustylib.ailment.Expression (a single fat-enum pyclass). The per-variant markers (Const, BinaryOp, …) dispatch on the variant tag via metaclass __instancecheck__.

__init__(idx=None, *_extra, **tags)
static from_bytes(data)

Deserialize an Expression from bytes.

Parameters:

data (bytes)

class angr.ailment.expression.Extract

Bases: object

Marker for Expression instances whose variant is Extract.

static __new__(cls, idx, bits, base, offset, endness, **tags)
Return type:

Expression

class angr.ailment.expression.FunctionLikeMacro

Bases: object

Marker for Expression instances whose variant is FunctionLikeMacro.

static __new__(cls, idx, name, args, bits=None, delimiter='()', **tags)
Return type:

Expression

class angr.ailment.expression.Insert

Bases: object

Marker for Expression instances whose variant is Insert.

static __new__(cls, idx, base, offset, value, endness, **tags)
Return type:

Expression

class angr.ailment.expression.Let

Bases: object

Marker for Expression instances whose variant is Let.

static __new__(cls, idx, defs, src, **tags)
Return type:

Expression

class angr.ailment.expression.Load

Bases: object

Marker for Expression instances whose variant is Load.

static __new__(cls, idx, addr, size, endness, *, guard=None, alt=None, **tags)
Return type:

Expression

class angr.ailment.expression.Macro

Bases: object

Marker for Expression instances whose variant is Macro (abstract).

Also matches FunctionLikeMacro instances to preserve the isinstance(x, Macro) -> True relationship of the former class hierarchy.

static __new__(cls, idx, name, delimiter='()', **tags)
Return type:

Expression

class angr.ailment.expression.MultiStatementExpression

Bases: object

Marker for Expression instances whose variant is MultiStatementExpression.

static __new__(cls, idx, stmts, expr, **tags)
Return type:

Expression

class angr.ailment.expression.Op

Bases: object

Marker for isinstance(x, Op) checks.

class angr.ailment.expression.Phi

Bases: object

Marker for Expression instances whose variant is Phi.

static __new__(cls, idx, bits, src_and_vvars, **tags)
Return type:

Expression

class angr.ailment.expression.Register

Bases: object

Marker for Expression instances whose variant is Register.

static __new__(cls, idx, reg_offset, bits, **tags)
Return type:

Expression

class angr.ailment.expression.Reinterpret

Bases: object

Marker for Expression instances whose variant is Reinterpret.

static __new__(cls, idx, from_bits, from_type, to_bits, to_type, operand, **tags)
Return type:

Expression

class angr.ailment.expression.RustEnum

Bases: object

Marker for Expression instances whose variant is RustEnum.

static __new__(cls, idx, name, fields, bits, **tags)
Return type:

Expression

class angr.ailment.expression.StackBaseOffset

Bases: object

Marker for Expression instances whose variant is StackBaseOffset.

static __new__(cls, idx, bits, offset, **tags)
Return type:

Expression

class angr.ailment.expression.StringLiteral

Bases: object

Marker for Expression instances whose variant is StringLiteral.

static __new__(cls, idx, data, bits, **tags)
Return type:

Expression

class angr.ailment.expression.Struct

Bases: object

Marker for Expression instances whose variant is Struct.

static __new__(cls, idx, name, fields, field_offsets, bits, **tags)
Return type:

Expression

class angr.ailment.expression.Tmp

Bases: object

Marker for Expression instances whose variant is Tmp.

static __new__(cls, idx, tmp_idx, bits, **tags)
Return type:

Expression

class angr.ailment.expression.UnaryOp

Bases: object

Marker for Expression instances whose variant is UnaryOp.

static __new__(cls, idx, op, operand, bits=None, **tags)
Return type:

Expression

class angr.ailment.expression.VEXCCallExpression

Bases: object

Marker for Expression instances whose variant is VEXCCallExpression.

static __new__(cls, idx, callee, operands, bits, **tags)
Return type:

Expression

class angr.ailment.expression.VirtualVariable

Bases: object

Marker for Expression instances whose variant is VirtualVariable.

static __new__(cls, idx, varid, bits, category, oident=None, reg_vvars=None, **tags)
Return type:

Expression

class angr.ailment.expression.VirtualVariableCategory

Bases: object

Mirrors angr.ailment.expression.VirtualVariableCategory (IntEnum).

COMBO_REGISTER = <VirtualVariableCategory.COMBO_REGISTER: 5>
MEMORY = <VirtualVariableCategory.MEMORY: 2>
PARAMETER = <VirtualVariableCategory.PARAMETER: 3>
REGISTER = <VirtualVariableCategory.REGISTER: 0>
STACK = <VirtualVariableCategory.STACK: 1>
TMP = <VirtualVariableCategory.TMP: 4>
UNKNOWN = <VirtualVariableCategory.UNKNOWN: 6>
name
value
angr.ailment.expression.negate(expr, manager)

Negate a comparison or boolean expression.

Return type:

Expression

Parameters:

expr (Expression)