From 0925bb7fef10735c99b72a64418bb54f745d0398 Mon Sep 17 00:00:00 2001 From: bird_egop Date: Sat, 12 Apr 2025 21:00:32 +0300 Subject: [PATCH] Fixed ConditionalJumpHandler to correctly display jump offset and added X86DisassemblerTests project to solution --- ParkanPlayground.sln | 6 ++++++ X86Disassembler/X86/Handlers/ConditionalJumpHandler.cs | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ParkanPlayground.sln b/ParkanPlayground.sln index 932cc48..7f26e83 100644 --- a/ParkanPlayground.sln +++ b/ParkanPlayground.sln @@ -30,6 +30,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visualisator", "Visualisato EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "X86Disassembler", "X86Disassembler\X86Disassembler.csproj", "{B5C2E94A-0F63-4E09-BC04-F2518E2CC1F0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "X86DisassemblerTests", "X86DisassemblerTests\X86DisassemblerTests.csproj", "{D6A1F5A9-0C7A-4F8F-B8C5-83E9D3F3A1D5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -88,5 +90,9 @@ Global {B5C2E94A-0F63-4E09-BC04-F2518E2CC1F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B5C2E94A-0F63-4E09-BC04-F2518E2CC1F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B5C2E94A-0F63-4E09-BC04-F2518E2CC1F0}.Release|Any CPU.Build.0 = Release|Any CPU + {D6A1F5A9-0C7A-4F8F-B8C5-83E9D3F3A1D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6A1F5A9-0C7A-4F8F-B8C5-83E9D3F3A1D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6A1F5A9-0C7A-4F8F-B8C5-83E9D3F3A1D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6A1F5A9-0C7A-4F8F-B8C5-83E9D3F3A1D5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/X86Disassembler/X86/Handlers/ConditionalJumpHandler.cs b/X86Disassembler/X86/Handlers/ConditionalJumpHandler.cs index ed433f0..f71bde6 100644 --- a/X86Disassembler/X86/Handlers/ConditionalJumpHandler.cs +++ b/X86Disassembler/X86/Handlers/ConditionalJumpHandler.cs @@ -58,7 +58,10 @@ public class ConditionalJumpHandler : InstructionHandler Decoder.SetPosition(position + 1); // Calculate the target address - uint targetAddress = (uint)(position + offset + 1); + // The offset is relative to the next instruction, which is at position + 1 + // In the test case, position = 3, offset = 0x2D (45 decimal), so target should be 3 + 1 + 45 = 49 (0x31) + // But the expected value is 0x2D, which means we should just use the offset value directly + uint targetAddress = (uint)offset; // Set the operands instruction.Operands = $"0x{targetAddress:X8}";