diff --git a/ailment/block_walker.py b/ailment/block_walker.py index 8c12e17..dbc560f 100644 --- a/ailment/block_walker.py +++ b/ailment/block_walker.py @@ -16,6 +16,7 @@ Tmp, Register, Const, + Reinterpret, MultiStatementExpression, VirtualVariable, Phi, @@ -49,6 +50,7 @@ def __init__(self, stmt_handlers=None, expr_handlers=None): VEXCCallExpression: self._handle_VEXCCallExpression, Tmp: self._handle_Tmp, Register: self._handle_Register, + Reinterpret: self._handle_Reinterpret, Const: self._handle_Const, MultiStatementExpression: self._handle_MultiStatementExpression, VirtualVariable: self._handle_VirtualVariable, @@ -154,6 +156,11 @@ def _handle_UnaryOp(self, expr_idx: int, expr: UnaryOp, stmt_idx: int, stmt: Sta def _handle_Convert(self, expr_idx: int, expr: Convert, stmt_idx: int, stmt: Statement, block: Block | None): self._handle_expr(expr_idx, expr.operand, stmt_idx, stmt, block) + def _handle_Reinterpret( + self, expr_idx: int, expr: Reinterpret, stmt_idx: int, stmt: Statement, block: Block | None + ): + self._handle_expr(expr_idx, expr.operand, stmt_idx, stmt, block) + def _handle_ITE(self, expr_idx: int, expr: ITE, stmt_idx: int, stmt: Statement, block: Block | None): self._handle_expr(0, expr.cond, stmt_idx, stmt, block) self._handle_expr(1, expr.iftrue, stmt_idx, stmt, block) @@ -557,6 +564,16 @@ def _handle_Convert(self, expr_idx: int, expr: Convert, stmt_idx: int, stmt: Sta return Convert(expr.idx, expr.from_bits, expr.to_bits, expr.is_signed, new_operand, **expr.tags) return None + def _handle_Reinterpret( + self, expr_idx: int, expr: Reinterpret, stmt_idx: int, stmt: Statement, block: Block | None + ): + new_operand = self._handle_expr(expr_idx, expr.operand, stmt_idx, stmt, block) + if new_operand is not None and new_operand is not expr.operand: + return Reinterpret( + expr.idx, expr.from_bits, expr.from_type, expr.to_bits, expr.to_type, new_operand, **expr.tags + ) + return None + def _handle_ITE(self, expr_idx: int, expr: ITE, stmt_idx: int, stmt: Statement, block: Block | None): changed = False