ailment
— angr Intermediate Language#
- class ailment.Block(addr, original_size, statements=None, idx=None)[source]#
Bases:
object
Describes an AIL block.
- addr#
- original_size#
-
statements:
List
[Statement]#
- idx#
- class ailment.Assignment(*args, **kwargs)[source]#
Bases:
Statement
Assignment statement: expr_a = expr_b
- dst#
- src#
- class ailment.Expression(*args, **kwargs)[source]#
Bases:
TaggedObject
The base class of all AIL expressions.
- depth#
- class ailment.Const(*args, **kwargs)[source]#
Bases:
Atom
- value#
- bits#
- property size#
- property sign_bit#
- class ailment.UnaryOp(*args, **kwargs)[source]#
Bases:
Op
- operand#
- bits#
- variable#
- variable_offset#
- property operands#
- property size#
- class ailment.BinaryOp(*args, **kwargs)[source]#
Bases:
Op
- OPSTR_MAP = {'Add': '+', 'AddF': '+', 'AddV': '+', 'And': '&', 'Carry': 'CARRY', 'CmpEQ': '==', 'CmpF': 'CmpF', 'CmpGE': '>=', 'CmpGEs': '>=s', 'CmpGT': '>', 'CmpGTs': '>s', 'CmpLE': '<=', 'CmpLEs': '<=s', 'CmpLT': '<', 'CmpLTs': '<s', 'CmpNE': '!=', 'Concat': 'CONCAT', 'Div': '/', 'DivF': '/', 'DivMod': '/m', 'LogicalAnd': '&&', 'LogicalOr': '||', 'Mod': '%', 'Mul': '*', 'MulF': '*', 'MulV': '*', 'Or': '|', 'Rol': 'ROL', 'Ror': 'ROR', 'SBorrow': 'SBORROW', 'SCarry': 'SCARRY', 'Sar': '>>a', 'Shl': '<<', 'Shr': '>>', 'Sub': '-', 'SubF': '-', 'Xor': '^'}#
- COMPARISON_NEGATION = {'CmpEQ': 'CmpNE', 'CmpGE': 'CmpLT', 'CmpGEs': 'CmpLTs', 'CmpGT': 'CmpLE', 'CmpGTs': 'CmpLEs', 'CmpLE': 'CmpGT', 'CmpLEs': 'CmpGTs', 'CmpLT': 'CmpGE', 'CmpLTs': 'CmpGEs', 'CmpNE': 'CmpEQ'}#
- __init__(idx, op, operands, signed, variable=None, variable_offset=None, bits=None, floating_point=False, rounding_mode=None, from_bits=None, to_bits=None, **kwargs)[source]#
- operands#
- bits#
- signed#
- variable#
- variable_offset#
- floating_point#
- rounding_mode#
- from_bits#
- to_bits#
- property verbose_op#
- property size#
- class ailment.Manager(name=None, arch=None)[source]#
Bases:
object
- Parameters:
name (str | None) –
- property ins_addr: int | None#
- class ailment.AILBlockWalkerBase(stmt_handlers=None, expr_handlers=None)[source]#
Bases:
object
Walks all statements and expressions of an AIL node and do nothing.
- walk_expression(expr, stmt_idx=None, stmt=None, block=None)[source]#
- Parameters:
expr (Expression) –
stmt_idx (int | None) –
stmt (int | None) –
block (Block | None) –
- class ailment.AILBlockWalker(stmt_handlers=None, expr_handlers=None)[source]#
Bases:
AILBlockWalkerBase
Walks all statements and expressions of an AIL node, and rebuilds expressions, statements, or blocks if needed.
If you need a pure walker without rebuilding, use AILBlockWalkerBase instead.
Converter#
Expressions#
- class ailment.expression.Expression(*args, **kwargs)[source]#
Bases:
TaggedObject
The base class of all AIL expressions.
- depth#
- class ailment.expression.Atom(*args, **kwargs)[source]#
Bases:
Expression
- variable#
- variable_offset#
- class ailment.expression.Const(*args, **kwargs)[source]#
Bases:
Atom
- value#
- bits#
- property size#
- property sign_bit#
- class ailment.expression.Register(*args, **kwargs)[source]#
Bases:
Atom
- reg_offset#
- bits#
- property size#
- class ailment.expression.Op(*args, **kwargs)[source]#
Bases:
Expression
- op#
- property verbose_op#
- class ailment.expression.UnaryOp(*args, **kwargs)[source]#
Bases:
Op
- operand#
- bits#
- variable#
- variable_offset#
- property operands#
- property size#
- class ailment.expression.Convert(*args, **kwargs)[source]#
Bases:
UnaryOp
- TYPE_INT = 0#
- TYPE_FP = 1#
- __init__(idx, from_bits, to_bits, is_signed, operand, from_type=0, to_type=0, rounding_mode=None, **kwargs)[source]#
- from_bits#
- to_bits#
- is_signed#
- from_type#
- to_type#
- rounding_mode#
- class ailment.expression.Reinterpret(idx, from_bits, from_type, to_bits, to_type, operand, **kwargs)[source]#
Bases:
UnaryOp
- __init__(idx, from_bits, from_type, to_bits, to_type, operand, **kwargs)[source]#
- Parameters:
from_bits (int) –
from_type (str) –
to_bits (int) –
to_type (str) –
- from_bits#
- from_type#
- to_bits#
- to_type#
- class ailment.expression.BinaryOp(*args, **kwargs)[source]#
Bases:
Op
- OPSTR_MAP = {'Add': '+', 'AddF': '+', 'AddV': '+', 'And': '&', 'Carry': 'CARRY', 'CmpEQ': '==', 'CmpF': 'CmpF', 'CmpGE': '>=', 'CmpGEs': '>=s', 'CmpGT': '>', 'CmpGTs': '>s', 'CmpLE': '<=', 'CmpLEs': '<=s', 'CmpLT': '<', 'CmpLTs': '<s', 'CmpNE': '!=', 'Concat': 'CONCAT', 'Div': '/', 'DivF': '/', 'DivMod': '/m', 'LogicalAnd': '&&', 'LogicalOr': '||', 'Mod': '%', 'Mul': '*', 'MulF': '*', 'MulV': '*', 'Or': '|', 'Rol': 'ROL', 'Ror': 'ROR', 'SBorrow': 'SBORROW', 'SCarry': 'SCARRY', 'Sar': '>>a', 'Shl': '<<', 'Shr': '>>', 'Sub': '-', 'SubF': '-', 'Xor': '^'}#
- COMPARISON_NEGATION = {'CmpEQ': 'CmpNE', 'CmpGE': 'CmpLT', 'CmpGEs': 'CmpLTs', 'CmpGT': 'CmpLE', 'CmpGTs': 'CmpLEs', 'CmpLE': 'CmpGT', 'CmpLEs': 'CmpGTs', 'CmpLT': 'CmpGE', 'CmpLTs': 'CmpGEs', 'CmpNE': 'CmpEQ'}#
- __init__(idx, op, operands, signed, variable=None, variable_offset=None, bits=None, floating_point=False, rounding_mode=None, from_bits=None, to_bits=None, **kwargs)[source]#
- operands#
- bits#
- signed#
- variable#
- variable_offset#
- floating_point#
- rounding_mode#
- from_bits#
- to_bits#
- property verbose_op#
- property size#
- class ailment.expression.TernaryOp(*args, **kwargs)[source]#
Bases:
Op
- OPSTR_MAP = {}#
- operands#
- bits#
- property verbose_op#
- property size#
- class ailment.expression.Load(*args, **kwargs)[source]#
Bases:
Expression
- __init__(idx, addr, size, endness, variable=None, variable_offset=None, guard=None, alt=None, **kwargs)[source]#
- addr#
- size#
- endness#
- guard#
- alt#
- variable#
- variable_offset#
- property bits#
- class ailment.expression.ITE(*args, **kwargs)[source]#
Bases:
Expression
- cond#
- iffalse#
- iftrue#
- bits#
- variable#
- variable_offset#
- property size#
- class ailment.expression.DirtyExpression(*args, **kwargs)[source]#
Bases:
Expression
- dirty_expr#
- bits#
- property size#
- class ailment.expression.VEXCCallExpression(*args, **kwargs)[source]#
Bases:
Expression
- cee_name#
- operands#
- bits#
- property size#
- class ailment.expression.MultiStatementExpression(idx, stmts, expr, **kwargs)[source]#
Bases:
Expression
For representing comma-separated statements and expression in C.
- __init__(idx, stmts, expr, **kwargs)[source]#
- Parameters:
idx (int | None) –
stmts (List[Statement]) –
expr (Expression) –
- stmts#
- expr#
- property bits#
- property size#
- class ailment.expression.BasePointerOffset(*args, **kwargs)[source]#
Bases:
Expression
- bits#
- base#
- offset#
- variable#
- variable_offset#
- property size#
- class ailment.expression.StackBaseOffset(*args, **kwargs)[source]#
Bases:
BasePointerOffset
- ailment.expression.negate(expr)[source]#
- Return type:
- Parameters:
expr (Expression) –
Statement#
- class ailment.statement.Statement(*args, **kwargs)[source]#
Bases:
TaggedObject
The base class of all AIL statements.
- class ailment.statement.Assignment(*args, **kwargs)[source]#
Bases:
Statement
Assignment statement: expr_a = expr_b
- dst#
- src#
- class ailment.statement.Store(*args, **kwargs)[source]#
Bases:
Statement
Store statement: *addr = data
- addr#
- data#
- size#
- endness#
- variable#
- guard#
- offset#
- class ailment.statement.Jump(idx, target, target_idx=None, **kwargs)[source]#
Bases:
Statement
Jump statement: goto target
- target#
- target_idx#
- property depth#
- class ailment.statement.ConditionalJump(idx, condition, true_target, false_target, true_target_idx=None, false_target_idx=None, **kwargs)[source]#
Bases:
Statement
if (cond) {true_target} else {false_target}
- __init__(idx, condition, true_target, false_target, true_target_idx=None, false_target_idx=None, **kwargs)[source]#
- Parameters:
true_target_idx (int | None) –
false_target_idx (int | None) –
- condition#
- true_target#
- false_target#
- true_target_idx#
- false_target_idx#
- class ailment.statement.Call(idx, target, calling_convention=None, prototype=None, args=None, ret_expr=None, fp_ret_expr=None, **kwargs)[source]#
Bases:
Expression
,Statement
Call is both an expression and a statement. The return expression of a call is defined as the ret_expr if and only if the callee function has one return expression.
- __init__(idx, target, calling_convention=None, prototype=None, args=None, ret_expr=None, fp_ret_expr=None, **kwargs)[source]#
- Parameters:
calling_convention (SimCC | None) –
- target#
- calling_convention#
- prototype#
- args#
- ret_expr#
- fp_ret_expr#
- property bits#
- property size#
- property verbose_op#
- property op#
- class ailment.statement.Return(*args, **kwargs)[source]#
Bases:
Statement
Return statement: (return expr_a), (return)
- ret_exprs#
- class ailment.statement.DirtyStatement(*args, **kwargs)[source]#
Bases:
Statement
Wrapper around the original statement, which is usually not convertible (temporarily).
- dirty_stmt#
- class ailment.statement.Label(idx, name, ins_addr, block_idx=None, **kwargs)[source]#
Bases:
Statement
A dummy statement that indicates a label with a name.
- __init__(idx, name, ins_addr, block_idx=None, **kwargs)[source]#
- Parameters:
name (str) –
ins_addr (int) –
block_idx (int | None) –
- name#
- ins_addr#
- block_idx#
Misc. Things#
- class ailment.block.Block(addr, original_size, statements=None, idx=None)[source]#
Bases:
object
Describes an AIL block.
- Parameters:
statements (List[Statement]) –
- addr#
- original_size#
-
statements:
List
[Statement]#
- idx#
- class ailment.manager.Manager(name=None, arch=None)[source]#
Bases:
object
- Parameters:
name (str | None) –
- property ins_addr: int | None#
- class ailment.tagged_object.TaggedObject(*args, **kwargs)[source]#
Bases:
object
A class that takes arbitrary tags.
- idx#
- property tags: Dict#
- ailment.utils.get_bits(expr)[source]#
- Return type:
Optional
[int
]- Parameters:
expr (int | Expression) –