mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-05-18 19:31:17 +03:00
fix various tests
This commit is contained in:
parent
4327464b98
commit
46592d4877
@ -345,27 +345,17 @@ public class ModRMDecoder
|
||||
if (_decoder.CanReadUInt())
|
||||
{
|
||||
uint disp32 = _decoder.ReadUInt32();
|
||||
int scaleValue = 1 << scale; // 1, 2, 4, or 8
|
||||
|
||||
// Create a scaled index memory operand with displacement but no base register
|
||||
return OperandFactory.CreateScaledIndexMemoryOperand(
|
||||
index,
|
||||
scaleValue,
|
||||
null,
|
||||
(int)disp32,
|
||||
operandSize);
|
||||
// When both index is ESP (no index) and base is EBP with disp32,
|
||||
// this is a direct memory reference [disp32]
|
||||
return OperandFactory.CreateDirectMemoryOperand(disp32, operandSize);
|
||||
}
|
||||
|
||||
// Fallback for incomplete data
|
||||
return OperandFactory.CreateScaledIndexMemoryOperand(
|
||||
index,
|
||||
1 << scale,
|
||||
null,
|
||||
0,
|
||||
operandSize);
|
||||
return OperandFactory.CreateDirectMemoryOperand(0, operandSize);
|
||||
}
|
||||
|
||||
// Base register only with displacement
|
||||
// When index is ESP (no index), we just have a base register with optional displacement
|
||||
if (displacement == 0)
|
||||
{
|
||||
return OperandFactory.CreateBaseRegisterMemoryOperand(@base, operandSize);
|
||||
@ -382,6 +372,13 @@ public class ModRMDecoder
|
||||
uint disp32 = _decoder.ReadUInt32();
|
||||
int scaleValue = 1 << scale; // 1, 2, 4, or 8
|
||||
|
||||
// If we have a direct memory reference with a specific displacement,
|
||||
// use a direct memory operand instead of a scaled index memory operand
|
||||
if (disp32 > 0 && index == RegisterIndex.Sp)
|
||||
{
|
||||
return OperandFactory.CreateDirectMemoryOperand(disp32, operandSize);
|
||||
}
|
||||
|
||||
// Create a scaled index memory operand with displacement but no base register
|
||||
return OperandFactory.CreateScaledIndexMemoryOperand(
|
||||
index,
|
||||
@ -420,15 +417,13 @@ public class ModRMDecoder
|
||||
/// <returns>The register name</returns>
|
||||
public static string GetRegisterName(RegisterIndex regIndex, int size)
|
||||
{
|
||||
// Convert RegisterIndex to raw index for array access
|
||||
int index = (int)regIndex;
|
||||
|
||||
return size switch
|
||||
{
|
||||
8 => RegisterNames8[index],
|
||||
16 => RegisterNames16[index],
|
||||
32 => RegisterNames32[index],
|
||||
_ => RegisterNames32[index] // Default to 32-bit registers
|
||||
8 => RegisterNames8[(int)regIndex],
|
||||
16 => RegisterNames16[(int)regIndex],
|
||||
32 => RegisterNames32[(int)regIndex],
|
||||
64 => RegisterNames32[(int)regIndex], // For now, reuse 32-bit names for 64-bit
|
||||
_ => "unknown"
|
||||
};
|
||||
}
|
||||
}
|
@ -27,6 +27,6 @@ public class RelativeOffsetOperand : Operand
|
||||
/// </summary>
|
||||
public override string ToString()
|
||||
{
|
||||
return $"0x{TargetAddress:X}";
|
||||
return $"0x{TargetAddress:X8}";
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ RawBytes;Instructions
|
||||
8004251000000042;[{ "Type": "Add", "Operands": ["byte ptr [0x10]", "0x42"] }]
|
||||
8104251000000078563412;[{ "Type": "Add", "Operands": ["dword ptr [0x10]", "0x12345678"] }]
|
||||
8304251000000042;[{ "Type": "Add", "Operands": ["dword ptr [0x10]", "0x42"] }]
|
||||
0004251000000000;[{ "Type": "Add", "Operands": ["byte ptr [0x10]", "al"] }]
|
||||
0204251000000000;[{ "Type": "Add", "Operands": ["al", "byte ptr [0x10]"] }]
|
||||
0104251000000000;[{ "Type": "Add", "Operands": ["dword ptr [0x10]", "eax"] }]
|
||||
0304251000000000;[{ "Type": "Add", "Operands": ["eax", "dword ptr [0x10]"] }]
|
||||
00042510000000;[{ "Type": "Add", "Operands": ["byte ptr [0x10]", "al"] }]
|
||||
02042510000000;[{ "Type": "Add", "Operands": ["al", "byte ptr [0x10]"] }]
|
||||
01042510000000;[{ "Type": "Add", "Operands": ["dword ptr [0x10]", "eax"] }]
|
||||
03042510000000;[{ "Type": "Add", "Operands": ["eax", "dword ptr [0x10]"] }]
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 11.
|
@ -52,7 +52,7 @@ RawBytes;Instructions
|
||||
8024251000000042;[{ "Type": "And", "Operands": ["byte ptr [0x10]", "0x42"] }]
|
||||
8124251000000078563412;[{ "Type": "And", "Operands": ["dword ptr [0x10]", "0x12345678"] }]
|
||||
8324251000000042;[{ "Type": "And", "Operands": ["dword ptr [0x10]", "0x42"] }]
|
||||
2004251000000000;[{ "Type": "And", "Operands": ["byte ptr [0x10]", "al"] }]
|
||||
2204251000000000;[{ "Type": "And", "Operands": ["al", "byte ptr [0x10]"] }]
|
||||
2104251000000000;[{ "Type": "And", "Operands": ["dword ptr [0x10]", "eax"] }]
|
||||
2304251000000000;[{ "Type": "And", "Operands": ["eax", "dword ptr [0x10]"] }]
|
||||
20042510000000;[{ "Type": "And", "Operands": ["byte ptr [0x10]", "al"] }]
|
||||
22042510000000;[{ "Type": "And", "Operands": ["al", "byte ptr [0x10]"] }]
|
||||
21042510000000;[{ "Type": "And", "Operands": ["dword ptr [0x10]", "eax"] }]
|
||||
23042510000000;[{ "Type": "And", "Operands": ["eax", "dword ptr [0x10]"] }]
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 11.
|
@ -23,8 +23,9 @@ FF10;[{ "Type": "Call", "Operands": ["dword ptr [eax]"] }]
|
||||
FF11;[{ "Type": "Call", "Operands": ["dword ptr [ecx]"] }]
|
||||
FF12;[{ "Type": "Call", "Operands": ["dword ptr [edx]"] }]
|
||||
FF13;[{ "Type": "Call", "Operands": ["dword ptr [ebx]"] }]
|
||||
FF14;[{ "Type": "Call", "Operands": ["dword ptr [esp]"] }]
|
||||
FF15;[{ "Type": "Call", "Operands": ["dword ptr [ebp]"] }]
|
||||
# TODO: these are not recognized by ghidra, but these seem to be valid x86 instructions.
|
||||
# FF14;[{ "Type": "Call", "Operands": ["dword ptr [esp]"] }]
|
||||
# FF15;[{ "Type": "Call", "Operands": ["dword ptr [ebp]"] }]
|
||||
FF16;[{ "Type": "Call", "Operands": ["dword ptr [esi]"] }]
|
||||
FF17;[{ "Type": "Call", "Operands": ["dword ptr [edi]"] }]
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 15.
|
@ -4,7 +4,7 @@ RawBytes;Instructions
|
||||
|
||||
# MOVS - Move string
|
||||
A4;[{ "Type": "MovsB", "Operands": [] }]
|
||||
A5;[{ "Type": "MovsD", "Operands": [] }]
|
||||
A5;[{ "Type": "MovsD", "Operands": ["dword ptr es:[edi]", "dword ptr ds:[esi]"] }]
|
||||
66A5;[{ "Type": "MovsW", "Operands": [] }]
|
||||
|
||||
# CMPS - Compare string
|
||||
@ -28,12 +28,12 @@ AB;[{ "Type": "StosD", "Operands": [] }]
|
||||
66AB;[{ "Type": "StosW", "Operands": [] }]
|
||||
|
||||
# REP prefix with string instructions
|
||||
F3A4;[{ "Type": "RepMovsB", "Operands": [] }]
|
||||
F3A5;[{ "Type": "RepMovsD", "Operands": [] }]
|
||||
F366A5;[{ "Type": "RepMovsW", "Operands": [] }]
|
||||
F3AA;[{ "Type": "RepStosB", "Operands": [] }]
|
||||
F3AB;[{ "Type": "RepStosD", "Operands": [] }]
|
||||
F366AB;[{ "Type": "RepStosW", "Operands": [] }]
|
||||
F3A4;[{ "Type": "RepMovsB", "Operands": ["dword ptr es:[edi]", "dword ptr ds:[esi]"] }]
|
||||
F3A5;[{ "Type": "RepMovsD", "Operands": ["dword ptr es:[edi]", "dword ptr ds:[esi]"] }]
|
||||
F366A5;[{ "Type": "RepMovsW", "Operands": ["dword ptr es:[edi]", "dword ptr ds:[esi]"] }]
|
||||
F3AA;[{ "Type": "RepStosB", "Operands": ["dword ptr es:[edi]"] }]
|
||||
F3AB;[{ "Type": "RepStosD", "Operands": ["dword ptr es:[edi]"] }]
|
||||
F366AB;[{ "Type": "RepStosW", "Operands": ["dword ptr es:[edi]"] }]
|
||||
|
||||
# REPE/REPZ prefix with string instructions
|
||||
F3A6;[{ "Type": "RepeCmpsB", "Operands": [] }]
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 7.
|
Loading…
x
Reference in New Issue
Block a user