diff options
Diffstat (limited to 'miasm2/expression')
| -rw-r--r-- | miasm2/expression/expression.py | 6 | ||||
| -rw-r--r-- | miasm2/expression/simplifications_common.py | 14 |
2 files changed, 14 insertions, 6 deletions
diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py index e7657860..925190ca 100644 --- a/miasm2/expression/expression.py +++ b/miasm2/expression/expression.py @@ -669,7 +669,7 @@ class ExprLoc(Expr): class ExprAssign(Expr): - """An ExprAssign represent an affection from an Expression to another one. + """An ExprAssign represent an assignment from an Expression to another one. Some use cases: - var1 <- 2 @@ -679,8 +679,8 @@ class ExprAssign(Expr): def __init__(self, dst, src): """Create an ExprAssign for dst <- src - @dst: Expr, affectation destination - @src: Expr, affectation source + @dst: Expr, assignment destination + @src: Expr, assignment source """ # dst & src must be Expr assert isinstance(dst, Expr) diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py index f7171091..00b14554 100644 --- a/miasm2/expression/simplifications_common.py +++ b/miasm2/expression/simplifications_common.py @@ -1300,11 +1300,17 @@ def simp_slice_of_ext(_, expr): return expr def simp_slice_of_op_ext(expr_s, expr): - """(X.zeroExt() + ... + Int)[0:8] => X + ... + int[:]""" + """ + (X.zeroExt() + {Z, } + ... + Int)[0:8] => X + ... + int[:] + (X.zeroExt() | ... | Int)[0:8] => X | ... | int[:] + ... + """ if expr.start != 0: return expr src = expr.arg - if not src.is_op("+"): + if not src.is_op(): + return expr + if src.op not in ['+', '|', '^', '&']: return expr is_ok = True for arg in src.args: @@ -1314,12 +1320,14 @@ def simp_slice_of_op_ext(expr_s, expr): arg.op.startswith("zeroExt") and arg.args[0].size == expr.stop): continue + if arg.is_compose(): + continue is_ok = False break if not is_ok: return expr args = [expr_s(arg[:expr.stop]) for arg in src.args] - return ExprOp("+", *args) + return ExprOp(src.op, *args) def simp_cond_logic_ext(expr_s, expr): |