1
0
Fork 0

BRIDGE: added GuiUpdateAllViews export

BRIDGE: added GuiUpdateDisassemblyView export
DBG: call GuiUpdateAllViews(); where needed (resolved issue #19)
GUI: compatible with Qt5 & MSVC again
GUI: added '_gui_updatedisassemblyview' export
This commit is contained in:
mr.exodia 2013-11-16 00:17:55 +01:00
parent d7dc655794
commit 67bf3d2868
11 changed files with 42 additions and 10 deletions

View File

@ -11,6 +11,7 @@ GUISETDEBUGSTATE _gui_setdebugstate;
GUIADDLOGMESSAGE _gui_addlogmessage;
GUILOGCLEAR _gui_logclear;
GUIUPDATEREGISTERVIEW _gui_updateregisterview;
GUIUPDATEDISASSEMBLYVIEW _gui_updatedisassemblyview;
//DBG functions
DBGDBGINIT _dbg_dbginit;

View File

@ -34,6 +34,7 @@ typedef void (*GUISETDEBUGSTATE)(DBGSTATE state);
typedef void (*GUIADDLOGMESSAGE)(const char* msg);
typedef void (*GUILOGCLEAR)();
typedef void (*GUIUPDATEREGISTERVIEW)();
typedef void (*GUIUPDATEDISASSEMBLYVIEW)();
//GUI functions
extern GUIGUIINIT _gui_guiinit;
@ -42,6 +43,7 @@ extern GUISETDEBUGSTATE _gui_setdebugstate;
extern GUIADDLOGMESSAGE _gui_addlogmessage;
extern GUILOGCLEAR _gui_logclear;
extern GUIUPDATEREGISTERVIEW _gui_updateregisterview;
extern GUIUPDATEDISASSEMBLYVIEW _gui_updatedisassemblyview;
//DBG typedefs
typedef const char* (*DBGDBGINIT)();

View File

@ -43,6 +43,10 @@ DLL_IMPEXP const char* BridgeInit()
_gui_updateregisterview=(GUIUPDATEREGISTERVIEW)GetProcAddress(hInstGui, "_gui_updateregisterview");
if(!_gui_updateregisterview)
return "Export \"_gui_updateregisterview\" could not be found!";
//_gui_updatedisassemblyview
_gui_updatedisassemblyview=(GUIUPDATEDISASSEMBLYVIEW)GetProcAddress(hInstGui, "_gui_updatedisassemblyview");
if(!_gui_updatedisassemblyview)
return "Export \"_gui_updatedisassemblyview\" could not be found!";
///DBG Load
hInstDbg=LoadLibraryA(dbg_lib); //Mr. eXoDia
@ -312,11 +316,22 @@ DLL_IMPEXP void GuiLogClear()
_gui_logclear();
}
DLL_IMPEXP void GuiUpdateAllViews()
{
GuiUpdateRegisterView();
GuiUpdateDisassemblyView();
}
DLL_IMPEXP void GuiUpdateRegisterView()
{
_gui_updateregisterview();
}
DLL_IMPEXP void GuiUpdateDisassemblyView()
{
_gui_updatedisassemblyview();
}
//Main
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

View File

@ -164,7 +164,9 @@ DLL_IMPEXP void GuiDisasmAt(duint addr, duint cip);
DLL_IMPEXP void GuiSetDebugState(DBGSTATE state);
DLL_IMPEXP void GuiAddLogMessage(const char* msg);
DLL_IMPEXP void GuiLogClear();
DLL_IMPEXP void GuiUpdateAllViews();
DLL_IMPEXP void GuiUpdateRegisterView();
DLL_IMPEXP void GuiUpdateDisassemblyView();
#ifdef __cplusplus
}

View File

@ -68,7 +68,7 @@ bool dbgisrunning()
void DebugUpdateGui(uint disasm_addr)
{
GuiUpdateRegisterView();
GuiUpdateAllViews();
GuiDisasmAt(disasm_addr, (duint)GetContextData(UE_CIP));
}
@ -533,6 +533,7 @@ CMDRESULT cbDebugSetBPX(const char* cmd) //bp addr [,name [,type]]
dprintf("breakpoint at "fhex" set!\n", addr);
else
dputs("problem setting breakpoint!");
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
@ -563,6 +564,7 @@ CMDRESULT cbDebugEnableBPX(const char* cmd)
bNext=false;
}
dputs("all breakpoints enabled!");
GuiUpdateAllViews();
return res;
}
BREAKPOINT* bp=bpfind(bplist, arg1, 0, 0, BPNORMAL);
@ -595,6 +597,7 @@ CMDRESULT cbDebugEnableBPX(const char* cmd)
dputs("could not enable breakpoint");
else
bp->enabled=true;
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
@ -625,6 +628,7 @@ CMDRESULT cbDebugDisableBPX(const char* cmd)
bNext=false;
}
dputs("all breakpoints disabled!");
GuiUpdateAllViews();
return res;
}
BREAKPOINT* bp=bpfind(bplist, arg1, 0, 0, BPNORMAL);
@ -657,6 +661,7 @@ CMDRESULT cbDebugDisableBPX(const char* cmd)
dputs("could not disable breakpoint");
else
bp->enabled=false;
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
@ -714,6 +719,7 @@ CMDRESULT cbDebugToggleBPX(const char* cmd)
}
}
varset("$res", (uint)disable, false);
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
@ -743,6 +749,7 @@ CMDRESULT cbDebugDeleteBPX(const char* cmd)
}
//memset(bplist, 0, sizeof(BREAKPOINT));
dputs("all breakpoints deleted!");
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
BREAKPOINT* bp=bpfind(bplist, arg1, 0, 0, BPNORMAL);
@ -767,6 +774,7 @@ CMDRESULT cbDebugDeleteBPX(const char* cmd)
return STATUS_ERROR;
}
bpdel(bplist, 0, bp->addr, BPNORMAL);
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
@ -903,6 +911,7 @@ CMDRESULT cbDebugMemoryBpx(const char* cmd)
dprintf("memory breakpoint at "fhex" set!\n", addr);
else
dputs("problem setting breakpoint (report please)!");
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
@ -985,6 +994,7 @@ CMDRESULT cbDebugSetHardwareBreakpoint(const char* cmd)
dprintf("hardware breakpoint at "fhex" set!\n", addr);
else
dputs("problem setting breakpoint (report please)!");
GuiUpdateAllViews();
return STATUS_CONTINUE;
}

View File

@ -1272,6 +1272,7 @@ bool valtostring(const char* string, uint* value, bool silent)
dputs("failed to write memory");
return false;
}
GuiUpdateAllViews(); //repaint gui
return true;
}
else if(isregister(string)) //register
@ -1286,7 +1287,7 @@ bool valtostring(const char* string, uint* value, bool silent)
if(strstr(string, "ip"))
DebugUpdateGui(GetContextData(UE_CIP)); //update disassembly + register view
else
GuiUpdateRegisterView(); //update register view
GuiUpdateAllViews(); //repaint gui
return ok;
}
else if(*string=='!' and isflag(string+1)) //flag
@ -1301,7 +1302,7 @@ bool valtostring(const char* string, uint* value, bool silent)
if(*value)
set=true;
setflag(string+1, set);
GuiUpdateRegisterView(); //update register view
GuiUpdateAllViews(); //repaint gui
return true;
}
return varset(string, *value, false); //variable

View File

@ -31,7 +31,7 @@ AbstractTableView::AbstractTableView(QWidget *parent) : QAbstractScrollArea(pare
mNbrOfLineToPrint = 0;
mColResizeData = (ColumnResizingData_t){false, 0, 0};
memset(&mColResizeData, 0, sizeof(mColResizeData));
mGuiState = AbstractTableView::NoState;
@ -39,7 +39,7 @@ AbstractTableView::AbstractTableView(QWidget *parent) : QAbstractScrollArea(pare
// ScrollBar Init
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
mScrollBarAttributes = (ScrollBar64_t){false, 0};
memset(&mScrollBarAttributes, 0, sizeof(mScrollBarAttributes));
setMouseTracking(true);

View File

@ -46,7 +46,7 @@ void Bridge::emitDisassembleAtSignal(int_t va, int_t eip)
#endif
}
void Bridge::emitRepaintGUI()
void Bridge::emitUpdateDisassembly()
{
#ifdef BUILD_LIB
emit repaintGui();
@ -169,9 +169,9 @@ void Bridge::initBridge()
Bridge::getBridge()->emitDisassembleAtSignal((int_t)va, (int_t)eip);
}
__declspec(dllexport) void _gui_repaint()
__declspec(dllexport) void _gui_updatedisassemblyview()
{
Bridge::getBridge()->emitRepaintGUI();
Bridge::getBridge()->emitUpdateDisassembly();
}

View File

@ -22,7 +22,7 @@ public:
void readProcessMemory(byte_t* dest, uint_t va, uint_t size);
uint_t getSize(uint_t va);
void emitDisassembleAtSignal(int_t va, int_t eip);
void emitRepaintGUI();
void emitUpdateDisassembly();
void emitDbgStateChanged(DBGSTATE state);
uint_t getBase(uint_t addr);
static Bridge* getBridge();

View File

@ -14,6 +14,7 @@
extern "C" __declspec(dllexport) void _gui_addlogmessage(const char* msg);
extern "C" __declspec(dllexport) void _gui_logclear();
extern "C" __declspec(dllexport) void _gui_updateregisterview();
extern "C" __declspec(dllexport) void _gui_updatedisassemblyview();
#endif

View File

@ -206,7 +206,7 @@ void MainWindow::dropEvent(QDropEvent* pEvent)
if(pEvent->mimeData()->hasUrls())
{
QString filename = QString(pEvent->mimeData()->data("FileName"));
if(filename.contains(".exe", Qt::CaseInsensitive) or filename.contains(".dll", Qt::CaseInsensitive))
if(filename.contains(".exe", Qt::CaseInsensitive) || filename.contains(".dll", Qt::CaseInsensitive))
{
if(DbgIsDebugging())
{