From 3462c000e0c13d4153ee6547f9a5cd3573e04229 Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Wed, 4 Feb 2015 01:16:18 +0100 Subject: [PATCH] fixed a bug with resetting hardware breakpoints when they are deleted inside the handler (thanks to Demonic Sword!) --- .../TitanEngine.Debugger.DebugLoop.cpp | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp b/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp index 2d85a66..aa3430e 100644 --- a/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp +++ b/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp @@ -789,11 +789,13 @@ __declspec(dllexport) void TITCALL DebugLoop() { } - RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA); - RtlMoveMemory(&DebugRegisterX, &DebugRegister[0], sizeof HARDWARE_DATA); - DeleteHardwareBreakPoint(UE_DR0); - DebugRegisterXId = UE_DR0; - ResetHwBPX = true; + if(DebugRegister[0].DrxEnabled) + { + memcpy(&DebugRegisterX, &DebugRegister[0], sizeof(HARDWARE_DATA)); + DebugRegisterXId = UE_DR0; + DeleteHardwareBreakPoint(UE_DR0); + ResetHwBPX = true; + } } else { @@ -816,11 +818,13 @@ __declspec(dllexport) void TITCALL DebugLoop() { } - RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA); - RtlMoveMemory(&DebugRegisterX, &DebugRegister[1], sizeof HARDWARE_DATA); - DeleteHardwareBreakPoint(UE_DR1); - DebugRegisterXId = UE_DR1; - ResetHwBPX = true; + if(DebugRegister[1].DrxEnabled) + { + memcpy(&DebugRegisterX, &DebugRegister[1], sizeof(HARDWARE_DATA)); + DebugRegisterXId = UE_DR1; + DeleteHardwareBreakPoint(UE_DR1); + ResetHwBPX = true; + } } else { @@ -843,11 +847,13 @@ __declspec(dllexport) void TITCALL DebugLoop() { } - RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA); - RtlMoveMemory(&DebugRegisterX, &DebugRegister[2], sizeof HARDWARE_DATA); - DeleteHardwareBreakPoint(UE_DR2); - DebugRegisterXId = UE_DR2; - ResetHwBPX = true; + if(DebugRegister[2].DrxEnabled) + { + memcpy(&DebugRegisterX, &DebugRegister[2], sizeof(HARDWARE_DATA)); + DebugRegisterXId = UE_DR2; + DeleteHardwareBreakPoint(UE_DR2); + ResetHwBPX = true; + } } else { @@ -870,11 +876,13 @@ __declspec(dllexport) void TITCALL DebugLoop() { } - RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA); - RtlMoveMemory(&DebugRegisterX, &DebugRegister[3], sizeof HARDWARE_DATA); - DeleteHardwareBreakPoint(UE_DR3); - DebugRegisterXId = UE_DR3; - ResetHwBPX = true; + if(DebugRegister[3].DrxEnabled) + { + memcpy(&DebugRegisterX, &DebugRegister[3], sizeof(HARDWARE_DATA)); + DebugRegisterXId = UE_DR3; + DeleteHardwareBreakPoint(UE_DR3); + ResetHwBPX = true; + } } else {