diff options
| author | Ajax <commial@gmail.com> | 2017-06-01 17:33:13 +0200 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2017-06-01 17:33:13 +0200 |
| commit | 274cff35ec85c149c9fbcccbc135349509baa31c (patch) | |
| tree | 163258e5e4981a7a2b1b53eeee16ff80b0f55e6d /miasm2/expression/simplifications_common.py | |
| parent | e0235fcd5ee2e29d0b6b13cc576ae6fe23ed0b30 (diff) | |
| download | miasm-274cff35ec85c149c9fbcccbc135349509baa31c.tar.gz miasm-274cff35ec85c149c9fbcccbc135349509baa31c.zip | |
Add a new simplification: {@X[base + i] 0 X, @Y[base + i + X] X (X + Y)} => @(X+Y)[base + i]
Diffstat (limited to 'miasm2/expression/simplifications_common.py')
| -rw-r--r-- | miasm2/expression/simplifications_common.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py index 01db7597..eb9d0958 100644 --- a/miasm2/expression/simplifications_common.py +++ b/miasm2/expression/simplifications_common.py @@ -542,6 +542,17 @@ def simp_compose(e_s, e): new_e = args[0].arg >> ExprInt(args[0].start, args[0].arg.size) return new_e + # {@X[base + i] 0 X, @Y[base + i + X] X (X + Y)} => @(X+Y)[base + i] + for i, arg in enumerate(args[:-1]): + nxt = args[i + 1] + if arg.is_mem() and nxt.is_mem(): + gap = e_s(nxt.arg - arg.arg) + if gap.is_int() and int(gap) == arg.size / 8: + args = args[:i] + [ExprMem(arg.arg, + arg.size + nxt.size)] + args[i + 2:] + return ExprCompose(*args) + + # Compose with ExprCond with integers for src1/src2 and intergers => # propagage integers # {XXX?(0x0,0x1)?(0x0,0x1),0,8, 0x0,8,32} => XXX?(int1, int2) |