From b22f4eaf74179ae25b47bde306dfa7cc34e23e55 Mon Sep 17 00:00:00 2001 From: Jos Date: Thu, 20 Nov 2025 18:05:54 +0100 Subject: [PATCH] Ignore ES/CS/SS/DS segment overrides in x64 mode --- arch/X86/X86DisassemblerDecoder.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/arch/X86/X86DisassemblerDecoder.c b/arch/X86/X86DisassemblerDecoder.c index 0938d56130..3b141036f3 100644 --- a/arch/X86/X86DisassemblerDecoder.c +++ b/arch/X86/X86DisassemblerDecoder.c @@ -523,19 +523,27 @@ static int readPrefixes(struct InternalInstruction *insn) case 0x65: /* GS segment override */ switch (byte) { case 0x2e: - insn->segmentOverride = SEG_OVERRIDE_CS; + if (insn->mode != MODE_64BIT) { + insn->segmentOverride = SEG_OVERRIDE_CS; + } insn->prefix1 = byte; break; case 0x36: - insn->segmentOverride = SEG_OVERRIDE_SS; + if (insn->mode != MODE_64BIT) { + insn->segmentOverride = SEG_OVERRIDE_SS; + } insn->prefix1 = byte; break; case 0x3e: - insn->segmentOverride = SEG_OVERRIDE_DS; + if (insn->mode != MODE_64BIT) { + insn->segmentOverride = SEG_OVERRIDE_DS; + } insn->prefix1 = byte; break; case 0x26: - insn->segmentOverride = SEG_OVERRIDE_ES; + if (insn->mode != MODE_64BIT) { + insn->segmentOverride = SEG_OVERRIDE_ES; + } insn->prefix1 = byte; break; case 0x64: