From cd66cb2d5fc326104c17d1088d44970a63ee1b07 Mon Sep 17 00:00:00 2001 From: Joe Ranieri Date: Wed, 19 May 2021 17:08:46 -0400 Subject: [PATCH] Fix the displacement offset for moffset-encoded operands This was initially introduced in dce7da9 but lost in the LLVM 7 sync in 5a99624. --- arch/X86/X86DisassemblerDecoder.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/X86/X86DisassemblerDecoder.c b/arch/X86/X86DisassemblerDecoder.c index 64674e64e1..35d9304636 100644 --- a/arch/X86/X86DisassemblerDecoder.c +++ b/arch/X86/X86DisassemblerDecoder.c @@ -1999,6 +1999,15 @@ static int readOperands(struct InternalInstruction* insn) case ENCODING_Ia: if (readImmediate(insn, insn->addressSize)) return -1; + /* Direct memory-offset (moffset) immediate will get mapped + to memory operand later. We want the encoding info to + reflect that as well. */ + insn->displacementOffset = insn->immediateOffset; + insn->consumedDisplacement = true; + insn->displacementSize = insn->immediateSize; + insn->displacement = insn->immediates[insn->numImmediatesConsumed - 1]; + insn->immediateOffset = 0; + insn->immediateSize = 0; break; case ENCODING_IRC: