diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-07-29 13:41:16 +0200 |
|---|---|---|
| committer | serpilliere <fabrice.desclaux@cea.fr> | 2015-07-29 19:29:37 +0200 |
| commit | 5291abfd3c70250277224635c40ee14578b84ae4 (patch) | |
| tree | 1b53f6157ba26d3463929c593cc3061920959333 | |
| parent | 8f4f23c98336dbd66861aeb29ae3d8c2370a2ede (diff) | |
| download | miasm-5291abfd3c70250277224635c40ee14578b84ae4.tar.gz miasm-5291abfd3c70250277224635c40ee14578b84ae4.zip | |
X86/sem: fix 16bit jcc/loopcc
| -rw-r--r-- | miasm2/arch/x86/sem.py | 86 |
1 files changed, 64 insertions, 22 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py index 6b5ae583..7f174e82 100644 --- a/miasm2/arch/x86/sem.py +++ b/miasm2/arch/x86/sem.py @@ -1212,7 +1212,9 @@ def jz(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(zf, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(zf, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e = [m2_expr.ExprAff(meip, dst_o), m2_expr.ExprAff(ir.IRDst, dst_o), ] @@ -1224,7 +1226,8 @@ def jcxz(ir, instr, dst): meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) dst_o = m2_expr.ExprCond(mRCX[instr.mode][:16], - n, dst).zeroExtend(instr.mode) + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1235,7 +1238,8 @@ def jecxz(ir, instr, dst): meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) dst_o = m2_expr.ExprCond(mRCX[instr.mode][:32], - n, dst).zeroExtend(instr.mode) + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1245,7 +1249,9 @@ def jrcxz(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(mRCX[instr.mode], n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(mRCX[instr.mode], + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1255,7 +1261,9 @@ def jnz(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(zf, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(zf, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1265,7 +1273,9 @@ def jp(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(pf, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(pf, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1275,7 +1285,9 @@ def jnp(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(pf, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(pf, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1285,7 +1297,9 @@ def ja(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(cf | zf, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(cf | zf, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1295,7 +1309,9 @@ def jae(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(cf, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(cf, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1305,7 +1321,9 @@ def jb(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(cf, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(cf, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1315,7 +1333,9 @@ def jbe(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(cf | zf, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(cf | zf, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1325,7 +1345,9 @@ def jge(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(nf - of, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(nf - of, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1335,7 +1357,9 @@ def jg(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(zf | (nf - of), n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(zf | (nf - of), + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1345,7 +1369,9 @@ def jl(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(nf - of, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(nf - of, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1355,7 +1381,9 @@ def jle(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(zf | (nf - of), dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(zf | (nf - of), + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1365,7 +1393,9 @@ def js(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(nf, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(nf, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1375,7 +1405,9 @@ def jns(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(nf, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(nf, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1385,7 +1417,9 @@ def jo(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(of, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(of, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1395,7 +1429,9 @@ def jno(ir, instr, dst): e = [] meip = mRIP[instr.mode] n = m2_expr.ExprId(ir.get_next_label(instr), dst.size) - dst_o = m2_expr.ExprCond(of, n, dst).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(of, + n.zeroExtend(instr.mode), + dst.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1410,7 +1446,9 @@ def loop(ir, instr, dst): n = m2_expr.ExprId(ir.get_next_label(instr), instr.mode) c = myecx - m2_expr.ExprInt_from(myecx, 1) - dst_o = m2_expr.ExprCond(c, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(c, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(myecx, c)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) @@ -1432,7 +1470,9 @@ def loopne(ir, instr, dst): c &= zf ^ m2_expr.ExprInt1(1) e.append(m2_expr.ExprAff(myecx, myecx - m2_expr.ExprInt_from(myecx, 1))) - dst_o = m2_expr.ExprCond(c, dst, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(c, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] @@ -1451,7 +1491,9 @@ def loope(ir, instr, dst): 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, n).zeroExtend(instr.mode) + dst_o = m2_expr.ExprCond(c, + dst.zeroExtend(instr.mode), + n.zeroExtend(instr.mode)) e.append(m2_expr.ExprAff(meip, dst_o)) e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) return e, [] |