From c139a94c08c7608d32d3f4cfcfcbc3591c3984fa Mon Sep 17 00:00:00 2001 From: Duncan Ogilvie Date: Fri, 10 Apr 2020 03:58:43 +0200 Subject: [PATCH] GUI: add simple 'Find references to region' in memory map --- src/gui/Src/Gui/MemoryMapView.cpp | 13 +++++++++++++ src/gui/Src/Gui/MemoryMapView.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/gui/Src/Gui/MemoryMapView.cpp b/src/gui/Src/Gui/MemoryMapView.cpp index 94f0b39e..07f5b169 100644 --- a/src/gui/Src/Gui/MemoryMapView.cpp +++ b/src/gui/Src/Gui/MemoryMapView.cpp @@ -166,6 +166,10 @@ void MemoryMapView::setupContextMenu() mAddVirtualMod = new QAction(DIcon("virtual.png"), tr("Add virtual module"), this); connect(mAddVirtualMod, SIGNAL(triggered()), this, SLOT(addVirtualModSlot())); + //References + mReferences = new QAction(DIcon("find.png"), tr("Find references to region"), this); + connect(mReferences, SIGNAL(triggered()), this, SLOT(findReferencesSlot())); + //Comment mComment = new QAction(DIcon("comment.png"), tr("&Comment"), this); this->addAction(mComment); @@ -203,6 +207,7 @@ void MemoryMapView::contextMenuSlot(const QPoint & pos) wMenu.addAction(mComment); wMenu.addAction(mFindPattern); wMenu.addAction(mSwitchView); + wMenu.addAction(mReferences); wMenu.addSeparator(); wMenu.addAction(mMemoryAllocate); wMenu.addAction(mMemoryFree); @@ -618,6 +623,14 @@ void MemoryMapView::addVirtualModSlot() DbgCmdExec(QString("virtualmod \"%1\", %2, %3").arg(modname).arg(ToHexString(base)).arg(ToHexString(size)).toUtf8().constData()); } +void MemoryMapView::findReferencesSlot() +{ + auto base = duint(getCellContent(getInitialSelection(), 0).toULongLong(nullptr, 16)); + auto size = duint(getCellContent(getInitialSelection(), 1).toULongLong(nullptr, 16)); + DbgCmdExec(QString("reffindrange %1, %2, dis.sel()").arg(ToPtrString(base)).arg(ToPtrString(base + size)).toUtf8().constData()); + emit showReferences(); +} + void MemoryMapView::selectionGetSlot(SELECTIONDATA* selection) { selection->start = selection->end = duint(getCellContent(getInitialSelection(), 0).toULongLong(nullptr, 16)); diff --git a/src/gui/Src/Gui/MemoryMapView.h b/src/gui/Src/Gui/MemoryMapView.h index aae15074..0e8c7282 100644 --- a/src/gui/Src/Gui/MemoryMapView.h +++ b/src/gui/Src/Gui/MemoryMapView.h @@ -36,6 +36,7 @@ public slots: void gotoOriginSlot(); void gotoExpressionSlot(); void addVirtualModSlot(); + void findReferencesSlot(); void selectionGetSlot(SELECTIONDATA* selection); void disassembleAtSlot(dsint va, dsint cip); @@ -74,6 +75,7 @@ private: QAction* mMemoryFree; QAction* mAddVirtualMod; QAction* mComment; + QAction* mReferences; QMenu* mPluginMenu; duint mCipBase;