Skip to content

Commit d691e98

Browse files
author
plasma-disassembler
authored
Merge pull request #91 from jdavidberger/master
Added handling of SSE movs for x86
2 parents 432cac6 + acfce8e commit d691e98

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

plasma/lib/arch/x86/output.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
X86_INS_MOVSW, X86_INS_MOVSD, X86_INS_MOVSQ, X86_INS_LODSB,
3131
X86_INS_LODSW, X86_INS_LODSD, X86_INS_LODSQ, X86_INS_CMPSB,
3232
X86_INS_CMPSW, X86_INS_CMPSD, X86_INS_CMPSQ, X86_INS_SCASB,
33-
X86_INS_SCASW, X86_INS_SCASD, X86_INS_SCASQ, X86_INS_XADD, X86_PREFIX_LOCK)
33+
X86_INS_SCASW, X86_INS_SCASD, X86_INS_SCASQ, X86_INS_XADD, X86_PREFIX_LOCK,
34+
X86_INS_MOVSS, X86_INS_MOVAPD, X86_INS_MOVAPS, X86_INS_MOVUPS, X86_INS_MOVUPD)
3435

3536
from plasma.lib.output import OutputAbs
3637
from plasma.lib.arch.x86.utils import (inst_symbol, is_call, is_jump, is_ret,
@@ -65,9 +66,12 @@
6566
INST_MOVS = {X86_INS_MOVSB, X86_INS_MOVSW, X86_INS_MOVSD, X86_INS_MOVSQ}
6667
INST_CMPS = {X86_INS_CMPSB, X86_INS_CMPSW, X86_INS_CMPSD, X86_INS_CMPSQ}
6768
INST_SCAS = {X86_INS_SCASB, X86_INS_SCASW, X86_INS_SCASD, X86_INS_SCASQ}
69+
INST_MOV_SSE = {X86_INS_MOVSD, X86_INS_MOVSS, X86_INS_MOVAPD, X86_INS_MOVAPS, X86_INS_MOVUPS, X86_INS_MOVUPD}
6870

6971
REP_PREFIX = {X86_PREFIX_REPNE, X86_PREFIX_REP}
7072

73+
def is_sse_movd(i):
74+
return i.id == X86_INS_MOVSD and i.bytes[0] == 0xF2
7175

7276
class Output(OutputAbs):
7377
def _operand(self, i, num_op, hexa=False, show_deref=True,
@@ -415,9 +419,10 @@ def _sub_asm_inst(self, i, tab=0):
415419
self._add(" += D ? -{0} : {0}".format(i.operands[0].size))
416420
return
417421

418-
if i.id in INST_MOVS:
422+
# Be sure to differentiate between the SSE instruction MOVSD and the non SSE move string
423+
if i.id in INST_MOVS and not is_sse_movd(i):
419424
self._operand(i, 0)
420-
self._add(" = ")
425+
self._add("( = ")
421426
self._operand(i, 1)
422427
self._new_line()
423428
self._tabs(tab)
@@ -431,6 +436,12 @@ def _sub_asm_inst(self, i, tab=0):
431436
self._add(" += D ? -{0} : {0}".format(i.operands[0].size))
432437
return
433438

439+
if i.id in INST_MOV_SSE:
440+
self._operand(i, 0)
441+
self._add(" = ")
442+
self._operand(i, 1)
443+
return
444+
434445
if is_imm:
435446
self._section("!")
436447
self._add("mov ")

0 commit comments

Comments
 (0)