From 629ae6653b7f0e68cd6c143a86d76ef0034ebf32 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 18 Sep 2017 14:46:00 -1000 Subject: [PATCH] Fix pp field in readPrefix for VEX3 and EVEX (#1015) (#1016) --- arch/X86/X86DisassemblerDecoder.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/arch/X86/X86DisassemblerDecoder.c b/arch/X86/X86DisassemblerDecoder.c index 2dccd40f..53ad4867 100644 --- a/arch/X86/X86DisassemblerDecoder.c +++ b/arch/X86/X86DisassemblerDecoder.c @@ -722,7 +722,13 @@ static int readPrefixes(struct InternalInstruction *insn) | (xFromEVEX2of4(insn->vectorExtensionPrefix[1]) << 1) | (bFromEVEX2of4(insn->vectorExtensionPrefix[1]) << 0); } - + switch (ppFromEVEX3of4(insn->vectorExtensionPrefix[2])) { + default: + break; + case VEX_PREFIX_66: + hasOpSize = true; + break; + } //dbgprintf(insn, "Found EVEX prefix 0x%hhx 0x%hhx 0x%hhx 0x%hhx", // insn->vectorExtensionPrefix[0], insn->vectorExtensionPrefix[1], // insn->vectorExtensionPrefix[2], insn->vectorExtensionPrefix[3]); @@ -764,6 +770,13 @@ static int readPrefixes(struct InternalInstruction *insn) | (bFromVEX2of3(insn->vectorExtensionPrefix[1]) << 0); } + switch (ppFromVEX3of3(insn->vectorExtensionPrefix[2])) { + default: + break; + case VEX_PREFIX_66: + hasOpSize = true; + break; + } } } else if (byte == 0xc5) { uint8_t byte1;