From d3d2c4c63ff73820046cdfb50921e20adbdd7d11 Mon Sep 17 00:00:00 2001 From: bird_egop Date: Mon, 14 Apr 2025 00:54:16 +0300 Subject: [PATCH] Simplified TestRegMem8Handler by removing unused variables and improving code structure --- .../X86/Handlers/Test/TestRegMem8Handler.cs | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/X86Disassembler/X86/Handlers/Test/TestRegMem8Handler.cs b/X86Disassembler/X86/Handlers/Test/TestRegMem8Handler.cs index cd1cbbf..d19e6b2 100644 --- a/X86Disassembler/X86/Handlers/Test/TestRegMem8Handler.cs +++ b/X86Disassembler/X86/Handlers/Test/TestRegMem8Handler.cs @@ -37,9 +37,8 @@ public class TestRegMem8Handler : InstructionHandler // Set the mnemonic instruction.Mnemonic = "test"; - int position = Decoder.GetPosition(); - - if (position >= Length) + // Check if we have enough bytes for the ModR/M byte + if (!Decoder.CanReadByte()) { return false; } @@ -47,26 +46,19 @@ public class TestRegMem8Handler : InstructionHandler // Read the ModR/M byte var (mod, reg, rm, destOperand) = ModRMDecoder.ReadModRM(); - // For direct register addressing (mod == 3), the r/m field specifies a register + // Get the register name for the reg field + string regOperand = ModRMDecoder.GetRegisterName(reg, 8); + + // For direct register addressing (mod == 3), get the r/m register name if (mod == 3) { - // Get the register names - string rmReg = ModRMDecoder.GetRegisterName(rm, 8); - string regReg = ModRMDecoder.GetRegisterName(reg, 8); - - // Set the operands (TEST r/m8, r8) - // In x86 assembly, the TEST instruction has the operand order r/m8, r8 - // According to Ghidra and standard x86 assembly convention, it should be TEST CL,AL - // where CL is the r/m operand and AL is the reg operand - instruction.Operands = $"{rmReg}, {regReg}"; + string rmOperand = ModRMDecoder.GetRegisterName(rm, 8); + instruction.Operands = $"{rmOperand}, {regOperand}"; } else { - // Get the register name - string regReg = ModRMDecoder.GetRegisterName(reg, 8); - - // Set the operands (TEST r/m8, r8) - instruction.Operands = $"{destOperand}, {regReg}"; + // For memory operands, use the decoded operand string + instruction.Operands = $"{destOperand}, {regOperand}"; } return true;