diff options
| -rw-r--r-- | miasm2/arch/x86/sem.py | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py index b3dfb3ef..12f2ef2a 100644 --- a/miasm2/arch/x86/sem.py +++ b/miasm2/arch/x86/sem.py @@ -1775,14 +1775,18 @@ def movs(ir, instr, size): def movsd(_, instr, dst, src): - e = [] - if isinstance(dst, m2_expr.ExprId) and isinstance(src, m2_expr.ExprMem): - src = m2_expr.ExprMem(src.arg, dst.size) - elif isinstance(dst, m2_expr.ExprMem) and isinstance(src, m2_expr.ExprId): - dst = m2_expr.ExprMem(dst.arg, src.size) - - e.append(m2_expr.ExprAff(dst, src)) - return e, [] + # 64 bits access + if dst.is_id() and src.is_id(): + src = src[:64] + dst = dst[:64] + elif dst.is_mem() and src.is_id(): + dst = m2_expr.ExprMem(dst.arg, 64) + src = src[:64] + else: + src = m2_expr.ExprMem(src.arg, 64) + # Erase dst high bits + src = src.zeroExtend(dst.size) + return [m2_expr.ExprAff(dst, src)], [] def movsd_dispatch(ir, instr, dst=None, src=None): |