about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2020-07-21 15:37:39 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2020-07-21 16:47:59 +0200
commit82c5d696eb97b5816a276cbf9708d0b3602d7055 (patch)
treee90ca108dd1c130d015a3960051276d2c58d233a
parent9bf0f4c1c14d318110b56df6952b0fcc2950539e (diff)
downloadmiasm-82c5d696eb97b5816a276cbf9708d0b3602d7055.tar.gz
miasm-82c5d696eb97b5816a276cbf9708d0b3602d7055.zip
Move modint in core
-rw-r--r--example/ida/graph_ir.py3
-rw-r--r--miasm/analysis/modularintervals.py11
-rw-r--r--miasm/arch/aarch64/arch.py2
-rw-r--r--miasm/core/asmblock.py5
-rw-r--r--miasm/core/locationdb.py7
-rw-r--r--miasm/core/modint.py (renamed from miasm/expression/modint.py)3
-rw-r--r--miasm/core/utils.py3
-rw-r--r--miasm/expression/expression.py10
-rw-r--r--miasm/expression/simplifications_common.py2
-rw-r--r--miasm/expression/simplifications_explicit.py2
-rw-r--r--miasm/ir/translators/C.py2
-rw-r--r--miasm/ir/translators/smt2.py2
-rw-r--r--miasm/jitter/llvmconvert.py1
-rw-r--r--test/core/modint.py (renamed from test/expression/modint.py)2
-rw-r--r--test/jitter/jitload.py2
-rwxr-xr-xtest/test_all.py6
16 files changed, 23 insertions, 40 deletions
diff --git a/example/ida/graph_ir.py b/example/ida/graph_ir.py
index 7e8c616f..dee4e281 100644
--- a/example/ida/graph_ir.py
+++ b/example/ida/graph_ir.py
@@ -11,7 +11,6 @@ import idc
 import ida_funcs
 import idautils
 
-from miasm.core.asmblock import is_int
 from miasm.core.bin_stream_ida import bin_stream_ida
 from miasm.expression.simplifications import expr_simp
 from miasm.ir.ir import IRBlock, AssignBlock
@@ -83,7 +82,7 @@ Options:
 
 def label_init(self, name="", offset=None):
     self.fixedblocs = False
-    if is_int(name):
+    if isinstance(name, int_types):
         name = "loc_%X" % (int(name) & 0xFFFFFFFFFFFFFFFF)
     self.name = name
     self.attrib = None
diff --git a/miasm/analysis/modularintervals.py b/miasm/analysis/modularintervals.py
index 0df01911..67eda9dc 100644
--- a/miasm/analysis/modularintervals.py
+++ b/miasm/analysis/modularintervals.py
@@ -5,6 +5,7 @@ from builtins import int as int_types
 from itertools import product
 
 from miasm.core.interval import interval
+from miasm.core.utils import size2mask
 
 class ModularIntervals(object):
     """Intervals with a maximum size, supporting modular arithmetic"""
@@ -31,12 +32,6 @@ class ModularIntervals(object):
             assert end <= self.mask
 
     # Helpers
-
-    @staticmethod
-    def size2mask(size):
-        """Return the bit mask of size @size"""
-        return (1 << size) - 1
-
     def _range2interval(func):
         """Convert a function taking 2 ranges to a function taking a ModularIntervals
         and applying to the current instance"""
@@ -472,7 +467,7 @@ class ModularIntervals(object):
     @property
     def mask(self):
         """Return the mask corresponding to the instance size"""
-        return ModularIntervals.size2mask(self.size)
+        return size2mask(self.size)
 
     def __iter__(self):
         return iter(self.intervals)
@@ -496,7 +491,7 @@ class ModularIntervals(object):
         # Increasing size is always safe
         if new_size < self.size:
             # Check that current values are indeed included in the new range
-            assert self.intervals.hull()[1] <= ModularIntervals.size2mask(new_size)
+            assert self.intervals.hull()[1] <= size2mask(new_size)
 
         self.size = new_size
 
diff --git a/miasm/arch/aarch64/arch.py b/miasm/arch/aarch64/arch.py
index 57aa95da..525b015e 100644
--- a/miasm/arch/aarch64/arch.py
+++ b/miasm/arch/aarch64/arch.py
@@ -12,7 +12,7 @@ from miasm.core.bin_stream import bin_stream
 from miasm.arch.aarch64 import regs as regs_module
 from miasm.arch.aarch64.regs import *
 from miasm.core.cpu import log as log_cpu
-from miasm.expression.modint import uint32, uint64, mod_size2int
+from miasm.core.modint import mod_size2int
 from miasm.core.asm_ast import AstInt, AstId, AstMem, AstOp
 
 log = logging.getLogger("aarch64dis")
diff --git a/miasm/core/asmblock.py b/miasm/core/asmblock.py
index f412de86..6f965be8 100644
--- a/miasm/core/asmblock.py
+++ b/miasm/core/asmblock.py
@@ -12,7 +12,6 @@ from future.utils import viewitems, viewvalues
 from miasm.expression.expression import ExprId, ExprInt, get_expr_locs
 from miasm.expression.expression import LocKey
 from miasm.expression.simplifications import expr_simp
-from miasm.expression.modint import moduint, modint
 from miasm.core.utils import Disasm_Exception, pck
 from miasm.core.graph import DiGraph, DiGraphSimplifier, MatchGraphJoker
 from miasm.core.interval import interval
@@ -26,10 +25,6 @@ log_asmblock.addHandler(console_handler)
 log_asmblock.setLevel(logging.WARNING)
 
 
-def is_int(a):
-    return isinstance(a, (modint, moduint, int_types))
-
-
 class AsmRaw(object):
 
     def __init__(self, raw=b""):
diff --git a/miasm/core/locationdb.py b/miasm/core/locationdb.py
index dd336752..f950b48f 100644
--- a/miasm/core/locationdb.py
+++ b/miasm/core/locationdb.py
@@ -6,11 +6,6 @@ from future.utils import viewitems, viewvalues
 
 from miasm.core.utils import printable, force_bytes
 from miasm.expression.expression import LocKey, ExprLoc
-from miasm.expression.modint import moduint, modint
-
-
-def is_int(a):
-    return isinstance(a, (int_types, moduint, modint))
 
 
 class LocationDB(object):
@@ -246,7 +241,7 @@ class LocationDB(object):
 
         name = force_bytes(name)
         # Deprecation handling
-        if is_int(name):
+        if isinstance(name, int_types):
             assert offset is None or offset == name
             warnings.warn("Deprecated API: use 'add_location(offset=)' instead."
                           " An additional 'name=' can be provided to also "
diff --git a/miasm/expression/modint.py b/miasm/core/modint.py
index 22d17b9b..2ecefed1 100644
--- a/miasm/expression/modint.py
+++ b/miasm/core/modint.py
@@ -215,9 +215,6 @@ def is_modint(a):
     return isinstance(a, moduint)
 
 
-def size2mask(size):
-    return (1 << size) - 1
-
 mod_size2uint = {}
 mod_size2int = {}
 
diff --git a/miasm/core/utils.py b/miasm/core/utils.py
index 37248c40..ed630bde 100644
--- a/miasm/core/utils.py
+++ b/miasm/core/utils.py
@@ -129,6 +129,9 @@ def decode_hex(value):
 def encode_hex(value):
     return _ENCODE_HEX(value)[0]
 
+def size2mask(size):
+    """Return the bit mask of size @size"""
+    return (1 << size) - 1
 
 def hexdump(src, length=16):
     lines = []
diff --git a/miasm/expression/expression.py b/miasm/expression/expression.py
index 1534bd3f..c507f19f 100644
--- a/miasm/expression/expression.py
+++ b/miasm/expression/expression.py
@@ -38,8 +38,6 @@ from functools import cmp_to_key, total_ordering
 from future.utils import viewitems
 
 from miasm.core.utils import force_bytes, cmp_elts
-from miasm.expression.modint import mod_size2uint, is_modint, size2mask, \
-    define_uint
 from miasm.core.graph import DiGraph
 from functools import reduce
 
@@ -755,8 +753,8 @@ class ExprInt(Expr):
 
 
     def __init__(self, arg, size):
-        """Create an ExprInt from a modint or num/size
-        @arg: 'intable' number
+        """Create an ExprInt from num/size
+        @arg: int/long number
         @size: int size"""
         super(ExprInt, self).__init__(size)
         # Work for ._arg is done in __new__
@@ -768,8 +766,8 @@ class ExprInt(Expr):
         return self.__class__, state
 
     def __new__(cls, arg, size):
-        """Create an ExprInt from a modint or num/size
-        @arg: 'intable' number
+        """Create an ExprInt from num/size
+        @arg: int/long number
         @size: int size"""
 
         assert isinstance(arg, int_types)
diff --git a/miasm/expression/simplifications_common.py b/miasm/expression/simplifications_common.py
index dc9fadea..fd45ef6d 100644
--- a/miasm/expression/simplifications_common.py
+++ b/miasm/expression/simplifications_common.py
@@ -4,7 +4,7 @@
 
 from future.utils import viewitems
 
-from miasm.expression.modint import mod_size2int, mod_size2uint
+from miasm.core.modint import mod_size2int, mod_size2uint
 from miasm.expression.expression import ExprInt, ExprSlice, ExprMem, \
     ExprCond, ExprOp, ExprCompose, TOK_INF_SIGNED, TOK_INF_UNSIGNED, \
     TOK_INF_EQUAL_SIGNED, TOK_INF_EQUAL_UNSIGNED, TOK_EQUAL
diff --git a/miasm/expression/simplifications_explicit.py b/miasm/expression/simplifications_explicit.py
index 727db9c1..1f9d2dbe 100644
--- a/miasm/expression/simplifications_explicit.py
+++ b/miasm/expression/simplifications_explicit.py
@@ -1,4 +1,4 @@
-from miasm.expression.modint import size2mask
+from miasm.core.utils import size2mask
 from miasm.expression.expression import ExprInt, ExprCond, ExprCompose, \
     TOK_EQUAL
 
diff --git a/miasm/ir/translators/C.py b/miasm/ir/translators/C.py
index 7778abf7..55a229ff 100644
--- a/miasm/ir/translators/C.py
+++ b/miasm/ir/translators/C.py
@@ -1,5 +1,5 @@
 from miasm.ir.translators.translator import Translator
-from miasm.expression.modint import size2mask
+from miasm.core.utils import size2mask
 from miasm.expression.expression import ExprInt, ExprCond, ExprCompose, \
     TOK_EQUAL, \
     TOK_INF_SIGNED, TOK_INF_UNSIGNED, \
diff --git a/miasm/ir/translators/smt2.py b/miasm/ir/translators/smt2.py
index f5392da7..c4260eb4 100644
--- a/miasm/ir/translators/smt2.py
+++ b/miasm/ir/translators/smt2.py
@@ -133,7 +133,7 @@ class TranslatorSMT2(Translator):
         self.loc_db = loc_db
 
     def from_ExprInt(self, expr):
-        return bit_vec_val(expr.arg.arg, expr.size)
+        return bit_vec_val(int(expr), expr.size)
 
     def from_ExprId(self, expr):
         if str(expr) not in self._bitvectors:
diff --git a/miasm/jitter/llvmconvert.py b/miasm/jitter/llvmconvert.py
index 5289ed0b..5aae624b 100644
--- a/miasm/jitter/llvmconvert.py
+++ b/miasm/jitter/llvmconvert.py
@@ -28,6 +28,7 @@ from miasm.expression.expression import ExprId, ExprInt, ExprMem, ExprSlice, \
 
 import miasm.jitter.csts as m2_csts
 import miasm.core.asmblock as m2_asmblock
+from miasm.core.utils import size2mask
 from miasm.jitter.codegen import CGen, Attributes
 from miasm.expression.expression_helper import possible_values
 
diff --git a/test/expression/modint.py b/test/core/modint.py
index af80b284..d493b44e 100644
--- a/test/expression/modint.py
+++ b/test/core/modint.py
@@ -1,6 +1,6 @@
 from __future__ import print_function
 
-from miasm.expression.modint import *
+from miasm.core.modint import *
 
 a = uint8(0x42)
 b = uint8(0xFF)
diff --git a/test/jitter/jitload.py b/test/jitter/jitload.py
index 8b758a89..3038c21c 100644
--- a/test/jitter/jitload.py
+++ b/test/jitter/jitload.py
@@ -47,4 +47,4 @@ assert myjit.eval_expr(eax) == imm4
 ## Changes must be passed on myjit.cpu instance
 assert myjit.cpu.EAX == 4
 ## Memory
-assert myjit.eval_expr(memdata).arg.arg == int(encode_hex(data[::-1]), 16)
+assert int(myjit.eval_expr(memdata)) == int(encode_hex(data[::-1]), 16)
diff --git a/test/test_all.py b/test/test_all.py
index 71eccc6f..2670761b 100755
--- a/test/test_all.py
+++ b/test/test_all.py
@@ -305,7 +305,8 @@ testset += SemanticTestExec("x86_32", "PE", 0x401000, ["bsr_bsf"],
                             depends=[test_x86_32_bsr_bsf])
 
 ## Core
-for script in ["interval.py",
+for script in ["modint.py",
+               "interval.py",
                "graph.py",
                "parse_asm.py",
                "utils.py",
@@ -318,8 +319,7 @@ testset += RegressionTest(["asmblock.py"], base_dir="core",
                           products=["graph.dot", "graph2.dot",
                                     "graph3.dot", "graph4.dot"])
 ## Expression
-for script in ["modint.py",
-               "expression.py",
+for script in ["expression.py",
                "stp.py",
                "simplifications.py",
                "expression_helper.py",