about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/analysis/binary.py2
-rw-r--r--miasm2/analysis/data_analysis.py3
-rw-r--r--miasm2/analysis/disasm_cb.py7
-rw-r--r--miasm2/ir/analysis.py3
-rw-r--r--miasm2/ir/ir2C.py51
-rw-r--r--miasm2/ir/symbexec.py101
-rw-r--r--miasm2/os_dep/common.py2
-rw-r--r--miasm2/os_dep/win_api_x86_32.py7
-rw-r--r--miasm2/os_dep/win_api_x86_32_seh.py9
9 files changed, 102 insertions, 83 deletions
diff --git a/miasm2/analysis/binary.py b/miasm2/analysis/binary.py
index 17c87761..f5cecc87 100644
--- a/miasm2/analysis/binary.py
+++ b/miasm2/analysis/binary.py
@@ -1,6 +1,6 @@
 import logging
 
-from miasm2.core.bin_stream import *
+from miasm2.core.bin_stream import bin_stream_str, bin_stream_elf, bin_stream_pe
 from miasm2.jitter.csts import PAGE_READ
 
 
diff --git a/miasm2/analysis/data_analysis.py b/miasm2/analysis/data_analysis.py
index 06d28351..8462f150 100644
--- a/miasm2/analysis/data_analysis.py
+++ b/miasm2/analysis/data_analysis.py
@@ -1,4 +1,5 @@
-from miasm2.expression.expression import *
+from miasm2.expression.expression \
+    import get_expr_mem, get_list_rw, ExprId, ExprInt
 from miasm2.ir.symbexec import symbexec
 
 
diff --git a/miasm2/analysis/disasm_cb.py b/miasm2/analysis/disasm_cb.py
index d205d4eb..bf1db108 100644
--- a/miasm2/analysis/disasm_cb.py
+++ b/miasm2/analysis/disasm_cb.py
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
 #-*- coding:utf-8 -*-
 
-from miasm2.expression.expression import *
+from miasm2.expression.expression import ExprInt, ExprId, ExprMem, MatchExpr
 from miasm2.expression.simplifications import expr_simp
-from miasm2.core.asmbloc import *
-from miasm2.core.utils import *
+from miasm2.core.asmbloc \
+    import asm_symbol_pool, asm_constraint_next, asm_constraint_to
+from miasm2.core.utils import upck32
 # from miasm2.core.graph import DiGraph
 
 
diff --git a/miasm2/ir/analysis.py b/miasm2/ir/analysis.py
index 790a790e..037d1f4b 100644
--- a/miasm2/ir/analysis.py
+++ b/miasm2/ir/analysis.py
@@ -5,7 +5,8 @@ import logging
 
 from miasm2.ir.symbexec import symbexec
 from miasm2.core.graph import DiGraph
-from miasm2.expression.expression import *
+from miasm2.expression.expression \
+    import ExprAff, ExprCond, ExprId, ExprInt, ExprMem, ExprOp
 
 log = logging.getLogger("analysis")
 console_handler = logging.StreamHandler()
diff --git a/miasm2/ir/ir2C.py b/miasm2/ir/ir2C.py
index 33398474..71d1e1c4 100644
--- a/miasm2/ir/ir2C.py
+++ b/miasm2/ir/ir2C.py
@@ -1,4 +1,4 @@
-from miasm2.expression.expression import *
+import miasm2.expression.expression as m2_expr
 from miasm2.expression.simplifications import expr_simp
 from miasm2.core import asmbloc
 from miasm2.ir.translators.C import TranslatorC
@@ -18,7 +18,7 @@ for size in [8, 16, 32, 64]:
     prefetch_id_size[size] = []
     for i in xrange(20):
         name = 'pfmem%.2d_%d' % (size, i)
-        c = ExprId(name, size)
+        c = m2_expr.ExprId(name, size)
         globals()[name] = c
         prefetch_id.append(c)
         prefetch_id_size[size].append(c)
@@ -26,12 +26,12 @@ for size in [8, 16, 32, 64]:
 def init_arch_C(arch):
     arch.id2Cid = {}
     for x in arch.regs.all_regs_ids + prefetch_id:
-        arch.id2Cid[x] = ExprId('vmcpu->' + str(x), x.size)
+        arch.id2Cid[x] = m2_expr.ExprId('vmcpu->' + str(x), x.size)
 
     arch.id2newCid = {}
 
     for x in arch.regs.all_regs_ids + prefetch_id:
-        arch.id2newCid[x] = ExprId('vmcpu->%s_new' % x, x.size)
+        arch.id2newCid[x] = m2_expr.ExprId('vmcpu->%s_new' % x, x.size)
 
 
 def patch_c_id(arch, e):
@@ -142,14 +142,14 @@ my_size_mask = {1: 1, 2: 3, 3: 7, 7: 0x7f,
                 32: 0xFFFFFFFF,
                 64: 0xFFFFFFFFFFFFFFFFL}
 
-exception_flags = ExprId('exception_flags', 32)
+exception_flags = m2_expr.ExprId('exception_flags', 32)
 
 
 def set_pc(ir_arch, src):
     dst = ir_arch.jit_pc
-    if not isinstance(src, Expr):
-        src = ExprInt_from(dst, src)
-    e = ExprAff(dst, src.zeroExtend(dst.size))
+    if not isinstance(src, m2_expr.Expr):
+        src = m2_expr.ExprInt_from(dst, src)
+    e = m2_expr.ExprAff(dst, src.zeroExtend(dst.size))
     return e
 
 
@@ -173,13 +173,14 @@ def gen_resolve_other(ir_arch, e):
     return 'Resolve_dst(BlockDst, %s, 0)'%(TranslatorC.from_expr(patch_c_id(ir_arch.arch, e)))
 
 def gen_resolve_dst_simple(ir_arch, e):
-    if isinstance(e, ExprInt):
+    if isinstance(e, m2_expr.ExprInt):
         return gen_resolve_int(ir_arch, e)
-    elif isinstance(e, ExprId) and isinstance(e.name, asmbloc.asm_label):
+    elif isinstance(e, m2_expr.ExprId) and isinstance(e.name,
+                                                      asmbloc.asm_label):
         return gen_resolve_id_lbl(ir_arch, e)
-    elif isinstance(e, ExprId):
+    elif isinstance(e, m2_expr.ExprId):
         return gen_resolve_id(ir_arch, e)
-    elif isinstance(e, ExprMem):
+    elif isinstance(e, m2_expr.ExprMem):
         return gen_resolve_mem(ir_arch, e)
     else:
         return gen_resolve_other(ir_arch, e)
@@ -187,7 +188,7 @@ def gen_resolve_dst_simple(ir_arch, e):
 
 def gen_irdst(ir_arch, e):
     out = []
-    if isinstance(e, ExprCond):
+    if isinstance(e, m2_expr.ExprCond):
         dst_cond_c = TranslatorC.from_expr(patch_c_id(ir_arch.arch, e.cond))
         out.append("if (%s)"%dst_cond_c)
         out.append('    %s;'%(gen_resolve_dst_simple(ir_arch, e.src1)))
@@ -215,16 +216,16 @@ def Expr2C(ir_arch, l, exprs, gen_exception_code=False):
     fetch_mem = False
     set_exception_flags = False
     for e in exprs:
-        assert(isinstance(e, ExprAff))
-        assert(not isinstance(e.dst, ExprOp))
-        if isinstance(e.dst, ExprId):
+        assert isinstance(e, m2_expr.ExprAff)
+        assert not isinstance(e.dst, m2_expr.ExprOp)
+        if isinstance(e.dst, m2_expr.ExprId):
             if not e.dst in dst_dict:
                 dst_dict[e.dst] = []
             dst_dict[e.dst].append(e)
         else:
             new_expr.append(e)
         # test exception flags
-        ops = get_expr_ops(e)
+        ops = m2_expr.get_expr_ops(e)
         if set(['umod', 'udiv']).intersection(ops):
             set_exception_flags = True
         if e.dst == exception_flags:
@@ -234,7 +235,7 @@ def Expr2C(ir_arch, l, exprs, gen_exception_code=False):
         # search mem lookup for generate mem read prefetch
         rs = e.src.get_r(mem_read=True)
         for r in rs:
-            if (not isinstance(r, ExprMem)) or r in src_mem:
+            if (not isinstance(r, m2_expr.ExprMem)) or r in src_mem:
                 continue
             fetch_mem = True
             index = prefect_index[r.size]
@@ -277,7 +278,7 @@ def Expr2C(ir_arch, l, exprs, gen_exception_code=False):
 
 
 
-        if isinstance(dst, ExprId):
+        if isinstance(dst, m2_expr.ExprId):
             id_to_update.append(dst)
             str_dst = patch_c_new_id(ir_arch.arch, dst)
             if dst in ir_arch.arch.regs.regs_flt_expr:
@@ -286,7 +287,7 @@ def Expr2C(ir_arch, l, exprs, gen_exception_code=False):
             else:
                 out.append('%s = (%s)&0x%X;' % (str_dst, str_src,
                                                 my_size_mask[src.size]))
-        elif isinstance(dst, ExprMem):
+        elif isinstance(dst, m2_expr.ExprMem):
             fetch_mem = True
             str_dst = str_dst.replace('MEM_LOOKUP', 'MEM_WRITE')
             out_mem.append('%s, %s);' % (str_dst[:-1], str_src))
@@ -352,15 +353,15 @@ def Expr2C(ir_arch, l, exprs, gen_exception_code=False):
 
 
 def label2offset(e):
-    if not isinstance(e, ExprId):
+    if not isinstance(e, m2_expr.ExprId):
         return e
     if not isinstance(e.name, asmbloc.asm_label):
         return e
-    return ExprInt_from(e, e.name.offset)
+    return m2_expr.ExprInt_from(e, e.name.offset)
 
 
 def expr2pyobj(arch, e):
-    if isinstance(e, ExprId):
+    if isinstance(e, m2_expr.ExprId):
         if isinstance(e.name, asmbloc.asm_label):
             src_c = 'PyString_FromStringAndSize("%s", %d)' % (
                 e.name.name, len(e.name.name))
@@ -378,7 +379,7 @@ def ir2C(ir_arch, irbloc, lbl_done,
     # print irbloc
     out.append(["%s:" % irbloc.label.name])
     #out.append(['printf("%s:\n");' % irbloc.label.name])
-    assert(len(irbloc.irs) == len(irbloc.lines))
+    assert len(irbloc.irs) == len(irbloc.lines)
     for l, exprs in zip(irbloc.lines, irbloc.irs):
         if l.offset not in lbl_done:
             e = set_pc(ir_arch, l.offset & mask_int)
@@ -425,7 +426,7 @@ def irblocs2C(ir_arch, resolvers, label, irblocs,
 
     out.append("goto %s;" % label.name)
     bloc_labels = [x.label for x in irblocs]
-    assert(label in bloc_labels)
+    assert label in bloc_labels
 
     lbl_done = set([None])
 
diff --git a/miasm2/ir/symbexec.py b/miasm2/ir/symbexec.py
index 618c1ae4..f51baf9f 100644
--- a/miasm2/ir/symbexec.py
+++ b/miasm2/ir/symbexec.py
@@ -1,4 +1,5 @@
-from miasm2.expression.expression import *
+import miasm2.expression.expression as m2_expr
+from miasm2.expression.modint import int32
 from miasm2.expression.simplifications import expr_simp
 from miasm2.core import asmbloc
 import logging
@@ -22,14 +23,14 @@ class symbols():
             self[k] = v
 
     def __contains__(self, a):
-        if not isinstance(a, ExprMem):
+        if not isinstance(a, m2_expr.ExprMem):
             return self.symbols_id.__contains__(a)
         if not self.symbols_mem.__contains__(a.arg):
             return False
         return self.symbols_mem[a.arg][0].size == a.size
 
     def __getitem__(self, a):
-        if not isinstance(a, ExprMem):
+        if not isinstance(a, m2_expr.ExprMem):
             return self.symbols_id.__getitem__(a)
         if not a.arg in self.symbols_mem:
             raise KeyError(a)
@@ -39,7 +40,7 @@ class symbols():
         return m[1]
 
     def __setitem__(self, a, v):
-        if not isinstance(a, ExprMem):
+        if not isinstance(a, m2_expr.ExprMem):
             self.symbols_id.__setitem__(a, v)
             return
         self.symbols_mem.__setitem__(a.arg, (a, v))
@@ -51,7 +52,7 @@ class symbols():
             yield self.symbols_mem[a][0]
 
     def __delitem__(self, a):
-        if not isinstance(a, ExprMem):
+        if not isinstance(a, m2_expr.ExprMem):
             self.symbols_id.__delitem__(a)
         else:
             self.symbols_mem.__delitem__(a.arg)
@@ -102,7 +103,7 @@ class symbexec(object):
         if eval_cache is None:
             eval_cache = {}
         if isinstance(e.name, asmbloc.asm_label) and e.name.offset is not None:
-            return ExprInt_from(e, e.name.offset)
+            return m2_expr.ExprInt_from(e, e.name.offset)
         if not e in self.symbols:
             # raise ValueError('unknown symbol %s'% e)
             return e
@@ -116,7 +117,7 @@ class symbexec(object):
             eval_cache = {}
         a_val = self.expr_simp(self.eval_expr(e.arg, eval_cache))
         if a_val != e.arg:
-            a = self.expr_simp(ExprMem(a_val, size=e.size))
+            a = self.expr_simp(m2_expr.ExprMem(a_val, size=e.size))
         else:
             a = e
         if a in self.symbols:
@@ -139,13 +140,13 @@ class symbexec(object):
                     # x_size = self.symbols[x].size
                     if off >= 0:
                         m = min(a.size - off * 8, x.size)
-                        ee = ExprSlice(self.symbols[x], 0, m)
+                        ee = m2_expr.ExprSlice(self.symbols[x], 0, m)
                         ee = self.expr_simp(ee)
                         out.append((ee, off_base, off_base + m))
                         off_base += m
                     else:
                         m = min(a.size - off * 8, x.size)
-                        ee = ExprSlice(self.symbols[x], -off * 8, m)
+                        ee = m2_expr.ExprSlice(self.symbols[x], -off * 8, m)
                         ff = self.expr_simp(ee)
                         new_off_base = off_base + m + off * 8
                         out.append((ff, off_base, new_off_base))
@@ -153,18 +154,20 @@ class symbexec(object):
                 if out:
                     missing_slice = self.rest_slice(out, 0, a.size)
                     for sa, sb in missing_slice:
-                        ptr = self.expr_simp(a_val + ExprInt_from(a_val, sa / 8))
-                        mm = ExprMem(ptr, size=sb - sa)
+                        ptr = self.expr_simp(
+                            a_val + m2_expr.ExprInt_from(a_val, sa / 8)
+                        )
+                        mm = m2_expr.ExprMem(ptr, size=sb - sa)
                         mm.is_term = True
                         mm.is_simp = True
                         out.append((mm, sa, sb))
                     out.sort(key=lambda x: x[1])
                     # for e, sa, sb in out:
                     #    print str(e), sa, sb
-                    ee = ExprSlice(ExprCompose(out), 0, a.size)
+                    ee = m2_expr.ExprSlice(m2_expr.ExprCompose(out), 0, a.size)
                     ee = self.expr_simp(ee)
                     return ee
-            if self.func_read and isinstance(a.arg, ExprInt):
+            if self.func_read and isinstance(a.arg, m2_expr.ExprInt):
                 return self.func_read(a)
             else:
                 # XXX hack test
@@ -180,7 +183,7 @@ class symbexec(object):
                 v = self.find_mem_by_addr(ptr)
                 if v is None:
                     # raise ValueError("cannot find %s in mem"%str(ptr))
-                    val = ExprMem(ptr, 8)
+                    val = m2_expr.ExprMem(ptr, 8)
                     v = val
                     diff_size = 8
                 elif rest >= v.size:
@@ -193,12 +196,16 @@ class symbexec(object):
                 out.append(val)
                 ptr_index += diff_size
                 rest -= diff_size
-                ptr = self.expr_simp(self.eval_expr(ExprOp('+', ptr,
-                    ExprInt_from(ptr, v.size / 8)), eval_cache))
-            e = self.expr_simp(ExprCompose(out))
+                ptr = self.expr_simp(
+                    self.eval_expr(
+                        m2_expr.ExprOp('+', ptr,
+                                       m2_expr.ExprInt_from(ptr, v.size / 8)),
+                        eval_cache)
+                )
+            e = self.expr_simp(m2_expr.ExprCompose(out))
             return e
         # part lookup
-        tmp = self.expr_simp(ExprSlice(self.symbols[tmp], 0, a.size))
+        tmp = self.expr_simp(m2_expr.ExprSlice(self.symbols[tmp], 0, a.size))
         return tmp
 
     def eval_expr_visit(self, e, eval_cache=None):
@@ -210,15 +217,16 @@ class symbexec(object):
         if e in eval_cache:
             return eval_cache[e]
         c = e.__class__
-        deal_class = {ExprId: self.eval_ExprId,
-                      ExprInt: self.eval_ExprInt,
-                      ExprMem: self.eval_ExprMem,
+        deal_class = {m2_expr.ExprId: self.eval_ExprId,
+                      m2_expr.ExprInt: self.eval_ExprInt,
+                      m2_expr.ExprMem: self.eval_ExprMem,
                       }
         # print 'eval', e
         if c in deal_class:
             e = deal_class[c](e, eval_cache)
         # print "ret", e
-        if not (isinstance(e, ExprId) or isinstance(e, ExprInt)):
+        if not (isinstance(e, m2_expr.ExprId) or isinstance(e,
+                                                            m2_expr.ExprInt)):
             e.is_term = True
         return e
 
@@ -284,7 +292,7 @@ class symbexec(object):
     def substract_mems(self, a, b):
         ex = b.arg - a.arg
         ex = self.expr_simp(self.eval_expr(ex, {}))
-        if not isinstance(ex, ExprInt):
+        if not isinstance(ex, m2_expr.ExprInt):
             return None
         ptr_diff = int(int32(ex.arg))
         out = []
@@ -295,14 +303,15 @@ class symbexec(object):
             if sub_size >= a.size:
                 pass
             else:
-                ex = ExprOp('+', a.arg, ExprInt_from(a.arg, sub_size / 8))
+                ex = m2_expr.ExprOp('+', a.arg,
+                                    m2_expr.ExprInt_from(a.arg, sub_size / 8))
                 ex = self.expr_simp(self.eval_expr(ex, {}))
 
                 rest_ptr = ex
                 rest_size = a.size - sub_size
 
                 val = self.symbols[a][sub_size:a.size]
-                out = [(ExprMem(rest_ptr, rest_size), val)]
+                out = [(m2_expr.ExprMem(rest_ptr, rest_size), val)]
         else:
             #[a         ]
             # XXXX[b   ]YY
@@ -314,24 +323,25 @@ class symbexec(object):
             # part X
             if ptr_diff > 0:
                 val = self.symbols[a][0:ptr_diff * 8]
-                out.append((ExprMem(a.arg, ptr_diff * 8), val))
+                out.append((m2_expr.ExprMem(a.arg, ptr_diff * 8), val))
             # part Y
             if ptr_diff * 8 + b.size < a.size:
 
-                ex = ExprOp('+', b.arg, ExprInt_from(b.arg, b.size / 8))
+                ex = m2_expr.ExprOp('+', b.arg,
+                                    m2_expr.ExprInt_from(b.arg, b.size / 8))
                 ex = self.expr_simp(self.eval_expr(ex, {}))
 
                 rest_ptr = ex
                 rest_size = a.size - (ptr_diff * 8 + b.size)
                 val = self.symbols[a][ptr_diff * 8 + b.size:a.size]
-                out.append((ExprMem(ex, val.size), val))
+                out.append((m2_expr.ExprMem(ex, val.size), val))
         return out
 
     # give mem stored overlapping requested mem ptr
     def get_mem_overlapping(self, e, eval_cache=None):
         if eval_cache is None:
             eval_cache = {}
-        if not isinstance(e, ExprMem):
+        if not isinstance(e, m2_expr.ExprMem):
             raise ValueError('mem overlap bad arg')
         ov = []
         # suppose max mem size is 64 bytes, compute all reachable addresses
@@ -339,14 +349,15 @@ class symbexec(object):
         base_ptr = self.expr_simp(e.arg)
         for i in xrange(-7, e.size / 8):
             ex = self.expr_simp(
-                self.eval_expr(base_ptr + ExprInt_from(e.arg, i), eval_cache))
+                self.eval_expr(base_ptr + m2_expr.ExprInt_from(e.arg, i),
+                               eval_cache))
             to_test.append((i, ex))
 
         for i, x in to_test:
             if not x in self.symbols.symbols_mem:
                 continue
             ex = self.expr_simp(self.eval_expr(e.arg - x, eval_cache))
-            if not isinstance(ex, ExprInt):
+            if not isinstance(ex, m2_expr.ExprInt):
                 raise ValueError('ex is not ExprInt')
             ptr_diff = int32(ex.arg)
             if ptr_diff >= self.symbols.symbols_mem[x][1].size / 8:
@@ -361,24 +372,24 @@ class symbexec(object):
         eval_cache = dict(self.symbols.items())
 
         for e in exprs:
-            if not isinstance(e, ExprAff):
+            if not isinstance(e, m2_expr.ExprAff):
                 raise TypeError('not affect', str(e))
 
             src = self.eval_expr(e.src, eval_cache)
-            if isinstance(e.dst, ExprMem):
+            if isinstance(e.dst, m2_expr.ExprMem):
                 a = self.eval_expr(e.dst.arg, eval_cache)
                 a = self.expr_simp(a)
                 # search already present mem
                 tmp = None
                 # test if mem lookup is known
-                tmp = ExprMem(a, e.dst.size)
+                tmp = m2_expr.ExprMem(a, e.dst.size)
                 dst = tmp
-                if self.func_write and isinstance(dst.arg, ExprInt):
+                if self.func_write and isinstance(dst.arg, m2_expr.ExprInt):
                     self.func_write(self, dst, src, pool_out)
                 else:
                     pool_out[dst] = src
 
-            elif isinstance(e.dst, ExprId):
+            elif isinstance(e.dst, m2_expr.ExprId):
                 pool_out[e.dst] = src
             else:
                 raise ValueError("affected zarb", str(e.dst))
@@ -391,11 +402,11 @@ class symbexec(object):
         src_dst = self.eval_ir_expr(ir)
         eval_cache = dict(self.symbols.items())
         for dst, src in src_dst:
-            if isinstance(dst, ExprMem):
+            if isinstance(dst, m2_expr.ExprMem):
                 mem_overlap = self.get_mem_overlapping(dst, eval_cache)
                 for _, base in mem_overlap:
                     diff_mem = self.substract_mems(base, dst)
-                    del(self.symbols[base])
+                    del self.symbols[base]
                     for new_mem, new_val in diff_mem:
                         new_val.is_term = True
                         self.symbols[new_mem] = new_val
@@ -403,7 +414,7 @@ class symbexec(object):
             # print 'SRCo', src_o
             # src_o.is_term = True
             self.symbols[dst] = src_o
-            if isinstance(dst, ExprMem):
+            if isinstance(dst, m2_expr.ExprMem):
                 mem_dst.append(dst)
         return mem_dst
 
@@ -416,20 +427,20 @@ class symbexec(object):
         eval_cache = dict(self.symbols.items())
         return self.eval_expr(self.ir_arch.IRDst, eval_cache)
 
-    def emul_ir_bloc(self, myir, ad, step = False):
+    def emul_ir_bloc(self, myir, ad, step=False):
         b = myir.get_bloc(ad)
         if b is not None:
-            ad = self.emulbloc(b, step = step)
+            ad = self.emulbloc(b, step=step)
         return ad
 
-    def emul_ir_blocs(self, myir, ad, lbl_stop=None, step = False):
+    def emul_ir_blocs(self, myir, ad, lbl_stop=None, step=False):
         while True:
             b = myir.get_bloc(ad)
             if b is None:
                 break
             if b.label == lbl_stop:
                 break
-            ad = self.emulbloc(b, step = step)
+            ad = self.emulbloc(b, step=step)
         return ad
 
     def del_mem_above_stack(self, sp):
@@ -438,9 +449,9 @@ class symbexec(object):
             # print mem_ad, sp_val
             diff = self.eval_expr(mem_ad - sp_val, {})
             diff = expr_simp(diff)
-            if not isinstance(diff, ExprInt):
+            if not isinstance(diff, m2_expr.ExprInt):
                 continue
             m = expr_simp(diff.msb())
             if m.arg == 1:
-                del(self.symbols[mem])
+                del self.symbols[mem]
 
diff --git a/miasm2/os_dep/common.py b/miasm2/os_dep/common.py
index 83b00ae6..41d24405 100644
--- a/miasm2/os_dep/common.py
+++ b/miasm2/os_dep/common.py
@@ -1,4 +1,4 @@
-from miasm2.jitter.csts import *
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE
 
 def get_str_ansi(jitter, ad_str, max_char=None):
     l = 0
diff --git a/miasm2/os_dep/win_api_x86_32.py b/miasm2/os_dep/win_api_x86_32.py
index 5a673265..e47c6024 100644
--- a/miasm2/os_dep/win_api_x86_32.py
+++ b/miasm2/os_dep/win_api_x86_32.py
@@ -29,9 +29,10 @@ try:
 except ImportError:
     print "cannot find crypto, skipping"
 
-from miasm2.jitter.csts import *
-from miasm2.core.utils import *
-from miasm2.os_dep.common import *
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE, PAGE_EXEC
+from miasm2.core.utils import pck16, pck32, upck32, hexdump
+from miasm2.os_dep.common \
+    import heap, set_str_ansi, set_str_unic, get_str_ansi, get_str_unic
 from miasm2.os_dep.win_api_x86_32_seh import FS_0_AD
 
 log = logging.getLogger("win_api_x86_32")
diff --git a/miasm2/os_dep/win_api_x86_32_seh.py b/miasm2/os_dep/win_api_x86_32_seh.py
index e77e30d9..7b10c88c 100644
--- a/miasm2/os_dep/win_api_x86_32_seh.py
+++ b/miasm2/os_dep/win_api_x86_32_seh.py
@@ -19,11 +19,14 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 #
 import logging
+import os
+import struct
+
 from elfesteem import pe_init
-from miasm2.jitter.csts import *
-from miasm2.core.utils import *
+
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE
+from miasm2.core.utils import pck32, upck32
 import miasm2.arch.x86.regs as x86_regs
-import os
 
 # Constants Windows
 EXCEPTION_BREAKPOINT = 0x80000003