diff options
| author | serpilliere <devnull@localhost> | 2012-10-30 10:56:46 +0100 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2012-10-30 10:56:46 +0100 |
| commit | 02d39c007c686101d6da013f6eb05d648bc315a7 (patch) | |
| tree | 4b69370d5f504d3c232a9dc40688cf9839626048 /miasm/arch/ia32_sem.py | |
| parent | 5d813d7b9a9a6384ec0f872cf4d186dc0567a17e (diff) | |
| download | miasm-02d39c007c686101d6da013f6eb05d648bc315a7.tar.gz miasm-02d39c007c686101d6da013f6eb05d648bc315a7.zip | |
ia32_arch: fix pushad/popad sem
Diffstat (limited to '')
| -rw-r--r-- | miasm/arch/ia32_sem.py | 12 |
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 |