Merge pull request #2592 from Mattiwatti/exitprocess-event
Change NtTerminateProcess breakpoint to a generic 'exit breakpoint'
This commit is contained in:
commit
c52e3c7598
|
@ -1489,9 +1489,23 @@ static void cbCreateProcess(CREATE_PROCESS_DEBUG_INFO* CreateProcessInfo)
|
|||
static void cbExitProcess(EXIT_PROCESS_DEBUG_INFO* ExitProcess)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Process stopped with exit code 0x%X\n"), ExitProcess->dwExitCode);
|
||||
const bool breakHere = settingboolget("Events", "NtTerminateProcess");
|
||||
if(breakHere)
|
||||
{
|
||||
// lock
|
||||
DebugUpdateGuiSetStateAsync(GetContextDataEx(hActiveThread, UE_CIP), true);
|
||||
lock(WAITID_RUN);
|
||||
}
|
||||
// plugin callback
|
||||
PLUG_CB_EXITPROCESS callbackInfo;
|
||||
callbackInfo.ExitProcess = ExitProcess;
|
||||
plugincbcall(CB_EXITPROCESS, &callbackInfo);
|
||||
if(breakHere)
|
||||
{
|
||||
dbgsetforeground();
|
||||
dbgsetskipexceptions(false);
|
||||
wait(WAITID_RUN);
|
||||
}
|
||||
_dbg_animatestop(); // Stop animating
|
||||
//history
|
||||
dbgcleartracestate();
|
||||
|
@ -1756,8 +1770,6 @@ static void cbLoadDll(LOAD_DLL_DEBUG_INFO* LoadDll)
|
|||
cookie.HandleNtdllLoad(bIsAttached);
|
||||
if(settingboolget("Misc", "TransparentExceptionStepping"))
|
||||
exceptionDispatchAddr = DbgValFromString("ntdll:KiUserExceptionDispatcher");
|
||||
if(settingboolget("Events", "NtTerminateProcess")) // Break on NtTerminateProcess
|
||||
cmddirectexec("bp ntdll.NtTerminateProcess, ss");
|
||||
//set debug flags
|
||||
if(dwDebugFlags != 0)
|
||||
{
|
||||
|
|
|
@ -56,7 +56,7 @@ void SettingsDialog::LoadSettings()
|
|||
settings.eventSystemBreakpoint = true;
|
||||
settings.eventTlsCallbacks = true;
|
||||
settings.eventEntryBreakpoint = true;
|
||||
settings.eventNtTerminateProcess = false;
|
||||
settings.eventExitBreakpoint = false;
|
||||
settings.engineType = DebugEngineTitanEngine;
|
||||
settings.engineCalcType = calc_unsigned;
|
||||
settings.engineBreakpointType = break_int3short;
|
||||
|
@ -90,7 +90,7 @@ void SettingsDialog::LoadSettings()
|
|||
|
||||
//Events tab
|
||||
GetSettingBool("Events", "SystemBreakpoint", &settings.eventSystemBreakpoint);
|
||||
GetSettingBool("Events", "NtTerminateProcess", &settings.eventNtTerminateProcess);
|
||||
GetSettingBool("Events", "NtTerminateProcess", &settings.eventExitBreakpoint);
|
||||
GetSettingBool("Events", "TlsCallbacks", &settings.eventTlsCallbacks);
|
||||
GetSettingBool("Events", "TlsCallbacksSystem", &settings.eventTlsCallbacksSystem);
|
||||
GetSettingBool("Events", "EntryBreakpoint", &settings.eventEntryBreakpoint);
|
||||
|
@ -105,7 +105,7 @@ void SettingsDialog::LoadSettings()
|
|||
GetSettingBool("Events", "ThreadEnd", &settings.eventThreadEnd);
|
||||
GetSettingBool("Events", "DebugStrings", &settings.eventDebugStrings);
|
||||
ui->chkSystemBreakpoint->setCheckState(bool2check(settings.eventSystemBreakpoint));
|
||||
ui->chkNtTerminateProcess->setCheckState(bool2check(settings.eventNtTerminateProcess));
|
||||
ui->chkExitBreakpoint->setCheckState(bool2check(settings.eventExitBreakpoint));
|
||||
ui->chkTlsCallbacks->setCheckState(bool2check(settings.eventTlsCallbacks));
|
||||
ui->chkTlsCallbacksSystem->setCheckState(bool2check(settings.eventTlsCallbacksSystem));
|
||||
ui->chkEntryBreakpoint->setCheckState(bool2check(settings.eventEntryBreakpoint));
|
||||
|
@ -389,7 +389,7 @@ void SettingsDialog::SaveSettings()
|
|||
{
|
||||
//Events tab
|
||||
BridgeSettingSetUint("Events", "SystemBreakpoint", settings.eventSystemBreakpoint);
|
||||
BridgeSettingSetUint("Events", "NtTerminateProcess", settings.eventNtTerminateProcess);
|
||||
BridgeSettingSetUint("Events", "NtTerminateProcess", settings.eventExitBreakpoint);
|
||||
BridgeSettingSetUint("Events", "TlsCallbacks", settings.eventTlsCallbacks);
|
||||
BridgeSettingSetUint("Events", "TlsCallbacksSystem", settings.eventTlsCallbacksSystem);
|
||||
BridgeSettingSetUint("Events", "EntryBreakpoint", settings.eventEntryBreakpoint);
|
||||
|
@ -660,9 +660,9 @@ void SettingsDialog::on_chkSystemBreakpoint_stateChanged(int arg1)
|
|||
settings.eventSystemBreakpoint = arg1 != Qt::Unchecked;
|
||||
}
|
||||
|
||||
void SettingsDialog::on_chkNtTerminateProcess_stateChanged(int arg1)
|
||||
void SettingsDialog::on_chkExitBreakpoint_stateChanged(int arg1)
|
||||
{
|
||||
settings.eventNtTerminateProcess = arg1 != Qt::Unchecked;
|
||||
settings.eventExitBreakpoint = arg1 != Qt::Unchecked;
|
||||
}
|
||||
|
||||
void SettingsDialog::on_chkTlsCallbacks_stateChanged(int arg1)
|
||||
|
|
|
@ -30,7 +30,7 @@ private slots:
|
|||
void on_btnSave_clicked();
|
||||
//Event tab
|
||||
void on_chkSystemBreakpoint_stateChanged(int arg1);
|
||||
void on_chkNtTerminateProcess_stateChanged(int arg1);
|
||||
void on_chkExitBreakpoint_stateChanged(int arg1);
|
||||
void on_chkTlsCallbacks_stateChanged(int arg1);
|
||||
void on_chkTlsCallbacksSystem_stateChanged(int arg1);
|
||||
void on_chkEntryBreakpoint_stateChanged(int arg1);
|
||||
|
@ -172,7 +172,7 @@ private:
|
|||
{
|
||||
//Event Tab
|
||||
bool eventSystemBreakpoint;
|
||||
bool eventNtTerminateProcess;
|
||||
bool eventExitBreakpoint;
|
||||
bool eventTlsCallbacks;
|
||||
bool eventTlsCallbacksSystem;
|
||||
bool eventEntryBreakpoint;
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<string>Events</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="3" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="chkEntryBreakpoint">
|
||||
<property name="text">
|
||||
<string>Entry Breakpoint*</string>
|
||||
|
@ -91,10 +91,10 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="chkNtTerminateProcess">
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="chkExitBreakpoint">
|
||||
<property name="text">
|
||||
<string>NtTerminateProcess*</string>
|
||||
<string>Exit Breakpoint*</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
Loading…
Reference in New Issue