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