about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2012-10-30 10:56:46 +0100
committerserpilliere <devnull@localhost>2012-10-30 10:56:46 +0100
commit02d39c007c686101d6da013f6eb05d648bc315a7 (patch)
tree4b69370d5f504d3c232a9dc40688cf9839626048
parent5d813d7b9a9a6384ec0f872cf4d186dc0567a17e (diff)
downloadmiasm-02d39c007c686101d6da013f6eb05d648bc315a7.tar.gz
miasm-02d39c007c686101d6da013f6eb05d648bc315a7.zip
ia32_arch: fix pushad/popad sem
Diffstat (limited to '')
-rw-r--r--miasm/arch/ia32_sem.py12
1 files changed, 4 insertions, 8 deletions
diff --git a/miasm/arch/ia32_sem.py b/miasm/arch/ia32_sem.py
index af73c359..240cf79e 100644
--- a/miasm/arch/ia32_sem.py
+++ b/miasm/arch/ia32_sem.py
@@ -1163,18 +1163,15 @@ def pushad(info):
     opmode, admode = info.opmode, info.admode
     if opmode == u16:
         s = 16
-        myesp = esp[:16]
         regs = [eax[:16], ecx[:16], edx[:16], ebx[:16],
                 esp[:16], ebp[:16], esi[:16], edi[:16]]
     else:
         s = 32
-        myesp = esp
         regs = [eax, ecx, edx, ebx, esp, ebp, esi, edi]
-    int_cast = tab_uintsize[s]
     for i in xrange(len(regs)):
-        c = ExprOp('+', myesp, ExprInt(int_cast(-(s/8)*(i+1))))
+        c = ExprOp('+', esp, ExprInt32(-(s/8)*(i+1)))
         e.append(ExprAff(ExprMem(c, s), regs[i]))
-    e.append(ExprAff(myesp, c))
+    e.append(ExprAff(esp, c))
     return e
 
 def popad(info):
@@ -1189,15 +1186,14 @@ def popad(info):
         s = 32
         myesp = esp
         regs = [eax, ecx, edx, ebx, esp, ebp, esi, edi]
-    int_cast = tab_uintsize[s]
     regs.reverse()
     for i in xrange(len(regs)):
         if regs[i] == myesp:
             continue
-        c = ExprOp('+', esp, ExprInt(int_cast((s/8)*i)))
+        c = ExprOp('+', esp, ExprInt32((s/8)*i))
         e.append(ExprAff(regs[i], ExprMem(c, s)))
 
-    c = ExprOp('+', myesp, ExprInt(int_cast((s/8)*(i+1))))
+    c = ExprOp('+', esp, ExprInt32((s/8)*(i+1)))
     e.append(ExprAff(esp, c))
 
     return e