diff --git a/X86Disassembler/X86/ModRMDecoder.cs b/X86Disassembler/X86/ModRMDecoder.cs index 99ee19a..ff7598f 100644 --- a/X86Disassembler/X86/ModRMDecoder.cs +++ b/X86Disassembler/X86/ModRMDecoder.cs @@ -22,8 +22,6 @@ public class ModRMDecoder _decoder = decoder; _sibDecoder = new SIBDecoder(decoder); } - - // These methods have been moved to the RegisterMapper class /// /// Decodes a ModR/M byte to get the operand @@ -32,22 +30,16 @@ public class ModRMDecoder /// The r/m field as RegisterIndex /// True if the operand is 64-bit /// The operand object - public Operand DecodeModRM(byte mod, RegisterIndex rmIndex, bool is64Bit) - { - return DecodeModRMInternal(mod, rmIndex, is64Bit ? 64 : 32); - } - + public Operand DecodeModRM(byte mod, RegisterIndex rmIndex, bool is64Bit) => DecodeModRMInternal(mod, rmIndex, is64Bit ? 64 : 32); + /// /// Decodes a ModR/M byte to get an 8-bit operand /// /// The mod field (2 bits) /// The r/m field as RegisterIndex /// The 8-bit operand object - public Operand DecodeModRM8(byte mod, RegisterIndex rmIndex) - { - return DecodeModRMInternal(mod, rmIndex, 8); - } - + public Operand DecodeModRM8(byte mod, RegisterIndex rmIndex) => DecodeModRMInternal(mod, rmIndex, 8); + /// /// Internal implementation for decoding a ModR/M byte to get an operand with specific size /// @@ -57,7 +49,6 @@ public class ModRMDecoder /// The operand object private Operand DecodeModRMInternal(byte mod, RegisterIndex rmIndex, int operandSize) { - switch (mod) { case 0: // [reg] or disp32 @@ -81,7 +72,7 @@ public class ModRMDecoder if (_decoder.CanReadByte()) { byte sib = _decoder.ReadByte(); - return DecodeSIB(sib, 0, operandSize); + return _sibDecoder.DecodeSIB(sib, 0, operandSize); } // Fallback for incomplete data @@ -99,7 +90,7 @@ public class ModRMDecoder { byte sib = _decoder.ReadByte(); sbyte disp8 = (sbyte)(_decoder.CanReadByte() ? _decoder.ReadByte() : 0); - return DecodeSIB(sib, (uint)disp8, operandSize); + return _sibDecoder.DecodeSIB(sib, (uint)disp8, operandSize); } // Fallback for incomplete data @@ -133,7 +124,7 @@ public class ModRMDecoder { byte sib = _decoder.ReadByte(); uint disp32 = _decoder.ReadUInt32(); - return DecodeSIB(sib, disp32, operandSize); + return _sibDecoder.DecodeSIB(sib, disp32, operandSize); } // Fallback for incomplete data @@ -197,28 +188,19 @@ public class ModRMDecoder /// Reads and decodes a ModR/M byte for standard 32-bit operands /// /// A tuple containing the mod, reg, rm fields and the decoded operand - public (byte mod, RegisterIndex reg, RegisterIndex rm, Operand operand) ReadModRM() - { - return ReadModRMInternal(false); - } + public (byte mod, RegisterIndex reg, RegisterIndex rm, Operand operand) ReadModRM() => ReadModRMInternal(false); /// /// Reads and decodes a ModR/M byte for 64-bit operands /// /// A tuple containing the mod, reg, rm fields and the decoded operand - public (byte mod, RegisterIndex reg, RegisterIndex rm, Operand operand) ReadModRM64() - { - return ReadModRMInternal(true); - } + public (byte mod, RegisterIndex reg, RegisterIndex rm, Operand operand) ReadModRM64() => ReadModRMInternal(true); /// /// Reads and decodes a ModR/M byte for 8-bit operands /// /// A tuple containing the mod, reg, rm fields and the decoded operand - public (byte mod, RegisterIndex8 reg, RegisterIndex8 rm, Operand operand) ReadModRM8() - { - return ReadModRM8Internal(); - } + public (byte mod, RegisterIndex8 reg, RegisterIndex8 rm, Operand operand) ReadModRM8() => ReadModRM8Internal(); /// /// Reads and decodes a ModR/M byte for 16-bit operands @@ -331,38 +313,4 @@ public class ModRMDecoder return (mod, reg, rm, operand); } - - /// - /// Decodes a SIB byte - /// - /// The SIB byte - /// The displacement value - /// The size of the operand in bits (8, 16, 32, or 64) - /// The decoded SIB operand - private Operand DecodeSIB(byte sib, uint displacement, int operandSize) - { - // Delegate to the SIBDecoder - return _sibDecoder.DecodeSIB(sib, displacement, operandSize); - } - - /// - /// Gets the register name based on the register index and size - /// - /// The register index as RegisterIndex enum - /// The register size (16 or 32 bits) - /// The register name - public static string GetRegisterName(RegisterIndex regIndex, int size) - { - return RegisterMapper.GetRegisterName(regIndex, size); - } - - /// - /// Gets the 8-bit register name based on the RegisterIndex8 enum value - /// - /// The register index as RegisterIndex8 enum - /// The 8-bit register name - public static string GetRegisterName(RegisterIndex8 regIndex8) - { - return RegisterMapper.GetRegisterName(regIndex8); - } } \ No newline at end of file diff --git a/X86Disassembler/X86/Operands/BaseRegisterMemoryOperand.cs b/X86Disassembler/X86/Operands/BaseRegisterMemoryOperand.cs index 5dff8ec..87b0fa2 100644 --- a/X86Disassembler/X86/Operands/BaseRegisterMemoryOperand.cs +++ b/X86Disassembler/X86/Operands/BaseRegisterMemoryOperand.cs @@ -28,7 +28,7 @@ public class BaseRegisterMemoryOperand : MemoryOperand /// public override string ToString() { - var registerName = ModRMDecoder.GetRegisterName(BaseRegister, 32); + var registerName = RegisterMapper.GetRegisterName(BaseRegister, 32); return $"{GetSizePrefix()}[{registerName}]"; } } diff --git a/X86Disassembler/X86/Operands/DisplacementMemoryOperand.cs b/X86Disassembler/X86/Operands/DisplacementMemoryOperand.cs index fb99f55..b17e829 100644 --- a/X86Disassembler/X86/Operands/DisplacementMemoryOperand.cs +++ b/X86Disassembler/X86/Operands/DisplacementMemoryOperand.cs @@ -36,7 +36,7 @@ public class DisplacementMemoryOperand : MemoryOperand public override string ToString() { string sign = Displacement >= 0 ? "+" : "-"; - var registerName = ModRMDecoder.GetRegisterName(BaseRegister, 32); + var registerName = RegisterMapper.GetRegisterName(BaseRegister, 32); string formattedDisplacement = $"0x{Displacement:X2}"; diff --git a/X86Disassembler/X86/Operands/Register8Operand.cs b/X86Disassembler/X86/Operands/Register8Operand.cs index 625c036..54b3f08 100644 --- a/X86Disassembler/X86/Operands/Register8Operand.cs +++ b/X86Disassembler/X86/Operands/Register8Operand.cs @@ -26,6 +26,6 @@ public class Register8Operand : Operand /// public override string ToString() { - return ModRMDecoder.GetRegisterName(Register); + return RegisterMapper.GetRegisterName(Register); } } diff --git a/X86Disassembler/X86/Operands/RegisterOperand.cs b/X86Disassembler/X86/Operands/RegisterOperand.cs index bc335de..e83e396 100644 --- a/X86Disassembler/X86/Operands/RegisterOperand.cs +++ b/X86Disassembler/X86/Operands/RegisterOperand.cs @@ -27,6 +27,6 @@ public class RegisterOperand : Operand /// public override string ToString() { - return ModRMDecoder.GetRegisterName(Register, Size); + return RegisterMapper.GetRegisterName(Register, Size); } } diff --git a/X86Disassembler/X86/Operands/ScaledIndexMemoryOperand.cs b/X86Disassembler/X86/Operands/ScaledIndexMemoryOperand.cs index 47dffd1..db832ff 100644 --- a/X86Disassembler/X86/Operands/ScaledIndexMemoryOperand.cs +++ b/X86Disassembler/X86/Operands/ScaledIndexMemoryOperand.cs @@ -50,8 +50,8 @@ public class ScaledIndexMemoryOperand : MemoryOperand /// public override string ToString() { - string baseRegPart = BaseRegister != null ? $"{ModRMDecoder.GetRegisterName(BaseRegister.Value, 32)}+" : ""; - string indexPart = $"{ModRMDecoder.GetRegisterName(IndexRegister, 32)}*{Scale}"; + string baseRegPart = BaseRegister != null ? $"{RegisterMapper.GetRegisterName(BaseRegister.Value, 32)}+" : ""; + string indexPart = $"{RegisterMapper.GetRegisterName(IndexRegister, 32)}*{Scale}"; string dispPart = ""; if (Displacement != 0)