fixed a bug with resetting hardware breakpoints when they are deleted inside the handler (thanks to Demonic Sword!)

This commit is contained in:
Mr. eXoDia 2015-02-04 01:16:18 +01:00
parent aacd8c2eb8
commit 3462c000e0
1 changed files with 28 additions and 20 deletions

View File

@ -789,12 +789,14 @@ __declspec(dllexport) void TITCALL DebugLoop()
{
}
RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA);
RtlMoveMemory(&DebugRegisterX, &DebugRegister[0], sizeof HARDWARE_DATA);
DeleteHardwareBreakPoint(UE_DR0);
if(DebugRegister[0].DrxEnabled)
{
memcpy(&DebugRegisterX, &DebugRegister[0], sizeof(HARDWARE_DATA));
DebugRegisterXId = UE_DR0;
DeleteHardwareBreakPoint(UE_DR0);
ResetHwBPX = true;
}
}
else
{
DBGCode = DBG_EXCEPTION_NOT_HANDLED;
@ -816,12 +818,14 @@ __declspec(dllexport) void TITCALL DebugLoop()
{
}
RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA);
RtlMoveMemory(&DebugRegisterX, &DebugRegister[1], sizeof HARDWARE_DATA);
DeleteHardwareBreakPoint(UE_DR1);
if(DebugRegister[1].DrxEnabled)
{
memcpy(&DebugRegisterX, &DebugRegister[1], sizeof(HARDWARE_DATA));
DebugRegisterXId = UE_DR1;
DeleteHardwareBreakPoint(UE_DR1);
ResetHwBPX = true;
}
}
else
{
DBGCode = DBG_EXCEPTION_NOT_HANDLED;
@ -843,12 +847,14 @@ __declspec(dllexport) void TITCALL DebugLoop()
{
}
RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA);
RtlMoveMemory(&DebugRegisterX, &DebugRegister[2], sizeof HARDWARE_DATA);
DeleteHardwareBreakPoint(UE_DR2);
if(DebugRegister[2].DrxEnabled)
{
memcpy(&DebugRegisterX, &DebugRegister[2], sizeof(HARDWARE_DATA));
DebugRegisterXId = UE_DR2;
DeleteHardwareBreakPoint(UE_DR2);
ResetHwBPX = true;
}
}
else
{
DBGCode = DBG_EXCEPTION_NOT_HANDLED;
@ -870,12 +876,14 @@ __declspec(dllexport) void TITCALL DebugLoop()
{
}
RtlZeroMemory(&DebugRegisterX, sizeof HARDWARE_DATA);
RtlMoveMemory(&DebugRegisterX, &DebugRegister[3], sizeof HARDWARE_DATA);
DeleteHardwareBreakPoint(UE_DR3);
if(DebugRegister[3].DrxEnabled)
{
memcpy(&DebugRegisterX, &DebugRegister[3], sizeof(HARDWARE_DATA));
DebugRegisterXId = UE_DR3;
DeleteHardwareBreakPoint(UE_DR3);
ResetHwBPX = true;
}
}
else
{
DBGCode = DBG_EXCEPTION_NOT_HANDLED;