From b2f02006df9487905384cd7654e003dbf01419a0 Mon Sep 17 00:00:00 2001 From: serpilliere Date: Fri, 13 Jun 2014 09:36:58 +0200 Subject: Simplification: detect and handle == condition Add corresponding regression tests --- miasm2/expression/simplifications.py | 4 +++- miasm2/expression/simplifications_common.py | 15 --------------- miasm2/expression/simplifications_cond.py | 30 ++++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 17 deletions(-) (limited to 'miasm2/expression') diff --git a/miasm2/expression/simplifications.py b/miasm2/expression/simplifications.py index d633cf3e..cbffb219 100644 --- a/miasm2/expression/simplifications.py +++ b/miasm2/expression/simplifications.py @@ -40,7 +40,9 @@ class ExpressionSimplifier(object): simplifications_cond.expr_simp_inf_unsigned_inversed], m2_expr.ExprOp: [simplifications_cond.exec_inf_unsigned, simplifications_cond.exec_inf_signed, - simplifications_cond.expr_simp_inverse], + simplifications_cond.expr_simp_inverse, + simplifications_cond.exec_equal], + m2_expr.ExprCond: [simplifications_cond.expr_simp_equal] } diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py index c907fe84..792a5a05 100644 --- a/miasm2/expression/simplifications_common.py +++ b/miasm2/expression/simplifications_common.py @@ -222,21 +222,6 @@ def simp_cst_propagation(e_s, e): 2 ** args[1].arg >= args[0].args[1].arg): return ExprInt_from(args[0], 0) - # int == int => 0 or 1 - if (op == '==' and - isinstance(args[0], ExprInt) and - isinstance(args[1], ExprInt)): - if args[0].arg == args[1].arg: - return ExprInt_from(args[0], 1) - else: - return ExprInt_from(args[0], 0) - #(A|int == 0) => 0 with int != 0 - if op == '==' and isinstance(args[1], ExprInt) and args[1].arg == 0: - if isinstance(args[0], ExprOp) and args[0].op == '|' and\ - isinstance(args[0].args[1], ExprInt) and \ - args[0].args[1].arg != 0: - return ExprInt_from(args[0], 0) - # parity(int) => int if op == 'parity' and isinstance(args[0], ExprInt): return ExprInt1(parity(args[0].arg)) diff --git a/miasm2/expression/simplifications_cond.py b/miasm2/expression/simplifications_cond.py index ee23f6db..6688bc31 100644 --- a/miasm2/expression/simplifications_cond.py +++ b/miasm2/expression/simplifications_cond.py @@ -8,7 +8,7 @@ # - Simplifications to catch known condition forms # # Conditions currently supported : -#