about summary refs log tree commit diff stats
path: root/miasm/expression/expression_helper.py
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2012-06-25 14:21:34 +0200
committerserpilliere <devnull@localhost>2012-06-25 14:21:34 +0200
commit408e6a88ef7ea6580fe04087bbb56a39832187a2 (patch)
tree4727a2f719c1b7574d19eac6c8314a4219d0b9bc /miasm/expression/expression_helper.py
parentdde5d0e9323997f4b987785109568369e68bce25 (diff)
downloadfocaccia-miasm-408e6a88ef7ea6580fe04087bbb56a39832187a2.tar.gz
focaccia-miasm-408e6a88ef7ea6580fe04087bbb56a39832187a2.zip
modint: fix self instanciation; expr_help: sort mem; expr_simp: fix -a+a
Diffstat (limited to 'miasm/expression/expression_helper.py')
-rw-r--r--miasm/expression/expression_helper.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/miasm/expression/expression_helper.py b/miasm/expression/expression_helper.py
index 39f643f1..d2c239c1 100644
--- a/miasm/expression/expression_helper.py
+++ b/miasm/expression/expression_helper.py
@@ -218,6 +218,12 @@ def _expr_simp(e):
                         args[i] = ExprInt(tab_size_int[args[i].get_size()](0))
                         del(args[j])
                         continue
+                # (- A) + A => 0
+                if op == '+' and isinstance(args[i], ExprOp) and args[i].op == "-":
+                    if len(args[i].args) == 1 and args[j] == args[i].args[0]:
+                        args[i] = ExprInt(tab_size_int[args[i].get_size()](0))
+                        del(args[j])
+                        continue
                 # A | A => A
                 if op == '|' and args[i] == args[j]:
                     del(args[j])
@@ -289,6 +295,7 @@ def _expr_simp(e):
             if total_bit in tab_size_int:
                 return ExprInt(tab_size_int[total_bit]((uint64((e.arg.arg)>>e.start)) & mask))
             else:
+                # XXX TODO fix correct size
                 fds
                 return ExprInt(type(e.arg.arg)((uint64((e.arg.arg)>>e.start)) & mask))
         # Slice(Slice(A, x), y) => Slice(A, z)