From c488c7780ada00daa5b1ca8a27a585abfacd2905 Mon Sep 17 00:00:00 2001 From: Ajax Date: Fri, 13 Nov 2015 17:25:37 +0100 Subject: Simplifications: add cst_propagation for >>>/<<< c_rez --- test/expression/simplifications.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'test/expression') diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py index 60609df4..7b68c1bf 100644 --- a/test/expression/simplifications.py +++ b/test/expression/simplifications.py @@ -18,8 +18,10 @@ f = ExprId('f', size=64) m = ExprMem(a) s = a[:8] +i0 = ExprInt(uint32(0x0)) i1 = ExprInt(uint32(0x1)) i2 = ExprInt(uint32(0x2)) +icustom = ExprInt(uint32(0x12345678)) cc = ExprCond(a, b, c) o = ExprCompose([(a[:8], 8, 16), @@ -301,6 +303,18 @@ to_test = [(ExprInt32(1) - ExprInt32(1), ExprInt32(0)), (expr_cmps(ExprInt32(-10), ExprInt32(-5)), ExprInt1(0)), + (ExprOp("<<>>c_rez", icustom, i0, i0), + icustom), + (ExprOp(">>>c_rez", icustom, i1, i0), + ExprInt32(0x91A2B3C)), + (ExprOp(">>>c_rez", icustom, i1, i1), + ExprInt32(0x891A2B3C)), ] for e, e_check in to_test[:]: -- cgit 1.4.1 From 84dd8d451611937b004fd9f8c992e0688ba0828b Mon Sep 17 00:00:00 2001 From: Ajax Date: Fri, 13 Nov 2015 17:43:36 +0100 Subject: ModInt: mimic C division instead of Python rounded one --- miasm2/expression/modint.py | 4 ++-- test/expression/simplifications.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'test/expression') diff --git a/miasm2/expression/modint.py b/miasm2/expression/modint.py index 8bad5ccb..72757e75 100644 --- a/miasm2/expression/modint.py +++ b/miasm2/expression/modint.py @@ -44,9 +44,9 @@ class moduint(object): def __div__(self, y): if isinstance(y, moduint): cls = self.maxcast(y) - return cls(self.arg / y.arg) + return cls(int(float(self.arg) / y.arg)) else: - return self.__class__(self.arg / y) + return self.__class__(int(float(self.arg) / y)) def __int__(self): return int(self.arg) diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py index 7b68c1bf..a490c0f8 100644 --- a/test/expression/simplifications.py +++ b/test/expression/simplifications.py @@ -315,6 +315,8 @@ to_test = [(ExprInt32(1) - ExprInt32(1), ExprInt32(0)), ExprInt32(0x91A2B3C)), (ExprOp(">>>c_rez", icustom, i1, i1), ExprInt32(0x891A2B3C)), + (ExprOp("idiv", ExprInt16(0x0123), ExprInt16(0xfffb))[:8], + ExprInt8(0xc6)), ] for e, e_check in to_test[:]: -- cgit 1.4.1 From 55a81cc899599ae24a4c5322a6d812a24e28a292 Mon Sep 17 00:00:00 2001 From: Ajax Date: Fri, 13 Nov 2015 17:44:17 +0100 Subject: ModInt: mimic C modulo instead of Python rounded one --- miasm2/expression/modint.py | 4 ++-- test/expression/simplifications.py | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'test/expression') diff --git a/miasm2/expression/modint.py b/miasm2/expression/modint.py index 72757e75..76896eb9 100644 --- a/miasm2/expression/modint.py +++ b/miasm2/expression/modint.py @@ -67,9 +67,9 @@ class moduint(object): def __mod__(self, y): if isinstance(y, moduint): cls = self.maxcast(y) - return cls(self.arg % y.arg) + return cls(self.arg - (y.arg * int(float(self.arg)/y.arg))) else: - return self.__class__(self.arg % y) + return self.__class__(self.arg - (y * int(float(self.arg)/y))) def __mul__(self, y): if isinstance(y, moduint): diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py index a490c0f8..acef0904 100644 --- a/test/expression/simplifications.py +++ b/test/expression/simplifications.py @@ -317,6 +317,9 @@ to_test = [(ExprInt32(1) - ExprInt32(1), ExprInt32(0)), ExprInt32(0x891A2B3C)), (ExprOp("idiv", ExprInt16(0x0123), ExprInt16(0xfffb))[:8], ExprInt8(0xc6)), + (ExprOp("imod", ExprInt16(0x0123), ExprInt16(0xfffb))[:8], + ExprInt8(0x01)), + ] for e, e_check in to_test[:]: -- cgit 1.4.1