about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/arch/x86/sem.py114
-rw-r--r--miasm2/core/sembuilder.py6
2 files changed, 60 insertions, 60 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py
index 566fd1fe..c39d2583 100644
--- a/miasm2/arch/x86/sem.py
+++ b/miasm2/arch/x86/sem.py
@@ -206,15 +206,15 @@ def gen_jcc(ir, instr, cond, dst, jmp_if):
     """
 
     e = []
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     next_lbl = m2_expr.ExprId(ir.get_next_label(instr), dst.size)
     if jmp_if:
         dstA, dstB = dst, next_lbl
     else:
         dstA, dstB = next_lbl, dst
     mn_dst = m2_expr.ExprCond(cond,
-                              dstA.zeroExtend(instr.mode),
-                              dstB.zeroExtend(instr.mode))
+                              dstA.zeroExtend(ir.IRDst.size),
+                              dstB.zeroExtend(ir.IRDst.size))
     e.append(m2_expr.ExprAff(meip, mn_dst))
     e.append(m2_expr.ExprAff(ir.IRDst, mn_dst))
     return e, []
@@ -227,8 +227,8 @@ def gen_fcmov(ir, instr, cond, arg1, arg2, mov_if):
     @cond: condition
     @mov_if: invert condition if False"""
 
-    lbl_do = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_do = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     if mov_if:
         dstA, dstB = lbl_do, lbl_skip
     else:
@@ -247,8 +247,8 @@ def gen_cmov(ir, instr, cond, arg1, arg2, mov_if):
     @cond: condition
     @mov_if: invert condition if False"""
 
-    lbl_do = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_do = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     if mov_if:
         dstA, dstB = lbl_do, lbl_skip
     else:
@@ -462,8 +462,8 @@ def _rotate_tpl(ir, instr, a, b, op, left=False, include_cf=False):
             return [], []
 
     e = []
-    lbl_do = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_do = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     e_do.append(m2_expr.ExprAff(ir.IRDst, lbl_skip))
     e.append(m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(shifter, lbl_do,
                                                         lbl_skip)))
@@ -558,8 +558,8 @@ def _shift_tpl(op, ir, instr, a, b, c=None, op_inv=None, left=False,
             return [], []
 
     e = []
-    lbl_do = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_do = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_skip = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     e_do.append(m2_expr.ExprAff(ir.IRDst, lbl_skip))
     e.append(m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(shifter, lbl_do,
                                                         lbl_skip)))
@@ -924,10 +924,10 @@ def bswap(ir, instr, a):
 
 
 def cmps(ir, instr, size):
-    lbl_cmp = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_cmp = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
     s = instr.v_admode()
     a = m2_expr.ExprMem(mRDI[instr.mode][:s], size)
@@ -957,10 +957,10 @@ def cmps(ir, instr, size):
 
 
 def scas(ir, instr, size):
-    lbl_cmp = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_cmp = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
     s = instr.v_admode()
     a = m2_expr.ExprMem(mRDI[instr.mode][:s], size)
@@ -1117,10 +1117,10 @@ def call(ir, instr, dst):
     e = []
     # opmode, admode = instr.opmode, instr.admode
     s = dst.size
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     opmode, admode = s, instr.v_admode()
     myesp = mRSP[instr.mode][:opmode]
-    n = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    n = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
 
     if (isinstance(dst, m2_expr.ExprOp) and dst.op == "segm"):
@@ -1154,8 +1154,8 @@ def call(ir, instr, dst):
     if ir.do_stk_segm:
         c = m2_expr.ExprOp('segm', SS, c)
     e.append(m2_expr.ExprAff(m2_expr.ExprMem(c, size=s), n))
-    e.append(m2_expr.ExprAff(meip, dst.zeroExtend(instr.mode)))
-    e.append(m2_expr.ExprAff(ir.IRDst, dst.zeroExtend(instr.mode)))
+    e.append(m2_expr.ExprAff(meip, dst.zeroExtend(ir.IRDst.size)))
+    e.append(m2_expr.ExprAff(ir.IRDst, dst.zeroExtend(ir.IRDst.size)))
     #if not expr_is_int_or_label(dst):
     #    dst = meip
     return e, []
@@ -1164,7 +1164,7 @@ def call(ir, instr, dst):
 def ret(ir, instr, a=None):
     e = []
     s = instr.mode
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     opmode, admode = instr.v_opmode(), instr.v_admode()
     s = opmode
     myesp = mRSP[instr.mode][:s]
@@ -1189,7 +1189,7 @@ def ret(ir, instr, a=None):
 def retf(ir, instr, a=None):
     e = []
     s = instr.mode
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     opmode, admode = instr.v_opmode(), instr.v_admode()
     if a is None:
         a = m2_expr.ExprInt(0, s)
@@ -1248,9 +1248,9 @@ def enter(ir, instr, a, b):
 
 def jmp(ir, instr, dst):
     e = []
-    meip = mRIP[instr.mode]
-    e.append(m2_expr.ExprAff(meip, dst))  # dst.zeroExtend(instr.mode)))
-    e.append(m2_expr.ExprAff(ir.IRDst, dst))  # dst.zeroExtend(instr.mode)))
+    meip = mRIP[ir.IRDst.size]
+    e.append(m2_expr.ExprAff(meip, dst))  # dst.zeroExtend(ir.IRDst.size)))
+    e.append(m2_expr.ExprAff(ir.IRDst, dst))  # dst.zeroExtend(ir.IRDst.size)))
 
     if isinstance(dst, m2_expr.ExprMem):
         dst = meip
@@ -1259,7 +1259,7 @@ def jmp(ir, instr, dst):
 
 def jmpf(ir, instr, a):
     e = []
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     s = instr.mode
     if (isinstance(a, m2_expr.ExprOp) and a.op == "segm"):
         segm = a.args[0]
@@ -1354,15 +1354,15 @@ def jno(ir, instr, dst):
 
 def loop(ir, instr, dst):
     e = []
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     admode = instr.v_admode()
     myecx = mRCX[instr.mode][:admode]
 
-    n = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    n = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     c = myecx - m2_expr.ExprInt_from(myecx, 1)
     dst_o = m2_expr.ExprCond(c,
-                             dst.zeroExtend(instr.mode),
-                             n.zeroExtend(instr.mode))
+                             dst.zeroExtend(ir.IRDst.size),
+                             n.zeroExtend(ir.IRDst.size))
     e.append(m2_expr.ExprAff(myecx, c))
     e.append(m2_expr.ExprAff(meip, dst_o))
     e.append(m2_expr.ExprAff(ir.IRDst, dst_o))
@@ -1371,11 +1371,11 @@ def loop(ir, instr, dst):
 
 def loopne(ir, instr, dst):
     e = []
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     admode = instr.v_admode()
     myecx = mRCX[instr.mode][:admode]
 
-    n = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    n = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
     c = m2_expr.ExprCond(myecx - m2_expr.ExprInt(1, size=myecx.size),
                  m2_expr.ExprInt1(1),
@@ -1384,8 +1384,8 @@ def loopne(ir, instr, dst):
 
     e.append(m2_expr.ExprAff(myecx, myecx - m2_expr.ExprInt_from(myecx, 1)))
     dst_o = m2_expr.ExprCond(c,
-                             dst.zeroExtend(instr.mode),
-                             n.zeroExtend(instr.mode))
+                             dst.zeroExtend(ir.IRDst.size),
+                             n.zeroExtend(ir.IRDst.size))
     e.append(m2_expr.ExprAff(meip, dst_o))
     e.append(m2_expr.ExprAff(ir.IRDst, dst_o))
     return e, []
@@ -1393,19 +1393,19 @@ def loopne(ir, instr, dst):
 
 def loope(ir, instr, dst):
     e = []
-    meip = mRIP[instr.mode]
+    meip = mRIP[ir.IRDst.size]
     admode = instr.v_admode()
     myecx = mRCX[instr.mode][:admode]
 
-    n = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    n = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     c = m2_expr.ExprCond(myecx - m2_expr.ExprInt(1, size=myecx.size),
                  m2_expr.ExprInt1(1),
                  m2_expr.ExprInt1(0))
     c &= zf
     e.append(m2_expr.ExprAff(myecx, myecx - m2_expr.ExprInt_from(myecx, 1)))
     dst_o = m2_expr.ExprCond(c,
-                             dst.zeroExtend(instr.mode),
-                             n.zeroExtend(instr.mode))
+                             dst.zeroExtend(ir.IRDst.size),
+                             n.zeroExtend(ir.IRDst.size))
     e.append(m2_expr.ExprAff(meip, dst_o))
     e.append(m2_expr.ExprAff(ir.IRDst, dst_o))
     return e, []
@@ -1596,9 +1596,9 @@ def cqo(ir, instr):
 
 
 def stos(ir, instr, size):
-    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
     s = instr.v_admode()
 
@@ -1632,9 +1632,9 @@ def stos(ir, instr, size):
 
 
 def lods(ir, instr, size):
-    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
     e = []
     s = instr.v_admode()
 
@@ -1669,9 +1669,9 @@ def lods(ir, instr, size):
 
 
 def movs(ir, instr, size):
-    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_df_0 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_df_1 = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
     s = instr.v_admode()
     # a = m2_expr.ExprMem(mRDI[instr.mode][:s], size)
@@ -2691,9 +2691,9 @@ def bsr_bsf(ir, instr, a, b, op_name):
         ZF = 0
         DEST = @op_name(SRC)
     """
-    lbl_src_null = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_src_not_null = m2_expr.ExprId(ir.gen_label(), instr.mode)
-    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), instr.mode)
+    lbl_src_null = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_src_not_null = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size)
+    lbl_next = m2_expr.ExprId(ir.get_next_label(instr), ir.IRDst.size)
 
     aff_dst = m2_expr.ExprAff(ir.IRDst, lbl_next)
     e = [m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(b,
@@ -3908,10 +3908,10 @@ class ir_x86_16(ir):
             c_cond = cond_dec | (zf ^ m2_expr.ExprInt1(1))
 
         # gen while
-        lbl_do = m2_expr.ExprId(self.gen_label(), instr.mode)
-        lbl_end = m2_expr.ExprId(self.gen_label(), instr.mode)
-        lbl_skip = m2_expr.ExprId(self.get_next_label(instr), instr.mode)
-        lbl_next = m2_expr.ExprId(self.get_next_label(instr), instr.mode)
+        lbl_do = m2_expr.ExprId(self.gen_label(), self.IRDst.size)
+        lbl_end = m2_expr.ExprId(self.gen_label(), self.IRDst.size)
+        lbl_skip = m2_expr.ExprId(self.get_next_label(instr), self.IRDst.size)
+        lbl_next = m2_expr.ExprId(self.get_next_label(instr), self.IRDst.size)
 
         for b in extra_ir:
             for ir in b.irs:
diff --git a/miasm2/core/sembuilder.py b/miasm2/core/sembuilder.py
index ecced326..83981919 100644
--- a/miasm2/core/sembuilder.py
+++ b/miasm2/core/sembuilder.py
@@ -151,11 +151,11 @@ class SemBuilder(object):
     def _create_labels(lbl_else=False):
         """Return the AST standing for label creations
         @lbl_else (optional): if set, create a label 'lbl_else'"""
-        lbl_end = "lbl_end = ExprId(ir.get_next_label(instr), instr.mode)"
+        lbl_end = "lbl_end = ExprId(ir.get_next_label(instr), ir.IRDst.size)"
         out = ast.parse(lbl_end).body
-        out += ast.parse("lbl_if = ExprId(ir.gen_label())").body
+        out += ast.parse("lbl_if = ExprId(ir.gen_label(), ir.IRDst.size)").body
         if lbl_else:
-            out += ast.parse("lbl_else = ExprId(ir.gen_label())").body
+            out += ast.parse("lbl_else = ExprId(ir.gen_label(), ir.IRDst.size)").body
         return out
 
     def _parse_body(self, body, argument_names):