diff --git a/x64_dbg_bridge/bridgemain.cpp b/x64_dbg_bridge/bridgemain.cpp index f5b0900f..76b53425 100644 --- a/x64_dbg_bridge/bridgemain.cpp +++ b/x64_dbg_bridge/bridgemain.cpp @@ -132,7 +132,6 @@ BRIDGE_IMPEXP const char* BridgeStart() if(!_dbg_dbginit || !_gui_guiinit) return "\"_dbg_dbginit\" || \"_gui_guiinit\" was not loaded yet, call BridgeInit!"; _gui_guiinit(0, 0); //remove arguments - _dbg_dbgexitsignal(); //send exit signal to debugger return 0; } @@ -360,6 +359,11 @@ BRIDGE_IMPEXP const char* DbgInit() return _dbg_dbginit(); } +BRIDGE_IMPEXP void DbgExit() +{ + _dbg_dbgexitsignal(); //send exit signal to debugger +} + BRIDGE_IMPEXP BPXTYPE DbgGetBpxTypeAt(duint addr) { return _dbg_bpgettypeat(addr); diff --git a/x64_dbg_bridge/bridgemain.h b/x64_dbg_bridge/bridgemain.h index 7566b02d..1ac42efc 100644 --- a/x64_dbg_bridge/bridgemain.h +++ b/x64_dbg_bridge/bridgemain.h @@ -473,6 +473,7 @@ struct FUNCTION_LOOP_INFO //Debugger functions BRIDGE_IMPEXP const char* DbgInit(); +BRIDGE_IMPEXP void DbgExit(); BRIDGE_IMPEXP bool DbgMemRead(duint va, unsigned char* dest, duint size); BRIDGE_IMPEXP bool DbgMemWrite(duint va, const unsigned char* src, duint size); BRIDGE_IMPEXP duint DbgMemGetPageSize(duint base); diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp b/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp index b9b535f9..1114966d 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp @@ -153,6 +153,30 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi //setup menu api initMenuApi(); + + bClose=false; +} + +DWORD WINAPI MainWindow::closeThread(void* ptr) +{ + static bool closing=false; + if(closing) + return 0; + closing=true; + DbgExit(); + MainWindow* mainWindow=(MainWindow*)ptr; + mainWindow->bClose=true; + mainWindow->close(); + return 0; +} + +void MainWindow::closeEvent(QCloseEvent* event) +{ + CloseHandle(CreateThread(0, 0, closeThread, this, 0, 0)); + if(bClose) + event->accept(); + else + event->ignore(); } MainWindow::~MainWindow() diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.h b/x64_dbg_gui/Project/Src/Gui/MainWindow.h index 0ecb881d..26cda849 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.h +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.h @@ -34,7 +34,10 @@ class MainWindow : public QMainWindow public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); + static DWORD WINAPI closeThread(void* ptr); + void closeEvent(QCloseEvent* event); void setTab(QWidget* widget); + bool bClose; public slots: void executeCommand();