about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/expression/modint.py4
-rw-r--r--test/expression/simplifications.py3
2 files changed, 5 insertions, 2 deletions
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[:]: