From 8c9b34ef0988487593368a3eca46071d84810050 Mon Sep 17 00:00:00 2001 From: bird_egop Date: Wed, 16 Apr 2025 21:46:08 +0300 Subject: [PATCH] Fixed PushImm16Handler registration order to correctly handle PUSH imm16 with operand size prefix --- X86Disassembler/X86/Handlers/InstructionHandlerFactory.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/X86Disassembler/X86/Handlers/InstructionHandlerFactory.cs b/X86Disassembler/X86/Handlers/InstructionHandlerFactory.cs index a5ef2d2..2993b97 100644 --- a/X86Disassembler/X86/Handlers/InstructionHandlerFactory.cs +++ b/X86Disassembler/X86/Handlers/InstructionHandlerFactory.cs @@ -378,8 +378,10 @@ public class InstructionHandlerFactory _handlers.Add(new PushRm32Handler(_decoder)); // PUSH r/m32 (opcode FF /6) // Add PUSH immediate handlers - _handlers.Add(new PushImm32Handler(_decoder)); // PUSH imm32 (opcode 68) + // Note: Order matters! PushImm16Handler must be registered before PushImm32Handler + // since both check for opcode 68h but PushImm16Handler also checks for operand size prefix _handlers.Add(new PushImm16Handler(_decoder)); // PUSH imm16 with operand size prefix (0x66 0x68) + _handlers.Add(new PushImm32Handler(_decoder)); // PUSH imm32 (opcode 68) _handlers.Add(new PushImm8Handler(_decoder)); // PUSH imm8 (opcode 6A) }