Skip to content

Commit 188b74b

Browse files
committed
GUI: implement OllyDbg's Find all names in current module (Ctrl+N)
Cheers to @R3MRUM from Twitter!
1 parent 37e83c9 commit 188b74b

File tree

9 files changed

+38
-0
lines changed

9 files changed

+38
-0
lines changed

src/gui/Src/Bridge/Bridge.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ class Bridge : public QObject
156156
void getDumpAttention();
157157
void openTraceFile(const QString & fileName);
158158
void updateTraceBrowser();
159+
void symbolSelectModule(duint base);
159160

160161
private:
161162
CRITICAL_SECTION csBridge;

src/gui/Src/Gui/CPUDisassembly.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,12 +594,14 @@ void CPUDisassembly::setupRightClickContextMenu()
594594
mFindCallsModule = makeAction(DIcon("call.png"), tr("&Intermodular calls"), SLOT(findCallsSlot()));
595595
mFindPatternModule = makeShortcutAction(DIcon("search_for_pattern.png"), tr("&Pattern"), SLOT(findPatternSlot()), "ActionFindPatternInModule");
596596
mFindGUIDModule = makeAction(DIcon("guid.png"), tr("&GUID"), SLOT(findGUIDSlot()));
597+
mFindNamesModule = makeShortcutAction(DIcon("names.png"), tr("&Names"), SLOT(findNamesSlot()), "ActionFindNamesInModule");
597598
mSearchModuleMenu->addAction(mFindCommandModule);
598599
mSearchModuleMenu->addAction(mFindConstantModule);
599600
mSearchModuleMenu->addAction(mFindStringsModule);
600601
mSearchModuleMenu->addAction(mFindCallsModule);
601602
mSearchModuleMenu->addAction(mFindPatternModule);
602603
mSearchModuleMenu->addAction(mFindGUIDModule);
604+
mSearchModuleMenu->addAction(mFindNamesModule);
603605

604606
// Search in Current Function menu
605607
mFindCommandFunction = makeAction(DIcon("search_for_command.png"), tr("C&ommand"), SLOT(findCommandSlot()));
@@ -1260,6 +1262,18 @@ void CPUDisassembly::findGUIDSlot()
12601262
emit displayReferencesWidget();
12611263
}
12621264

1265+
void CPUDisassembly::findNamesSlot()
1266+
{
1267+
if(sender() == mFindNamesModule)
1268+
{
1269+
auto base = DbgFunctions()->ModBaseFromAddr(rvaToVa(getInitialSelection()));
1270+
if(!base)
1271+
return;
1272+
Bridge::getBridge()->symbolSelectModule(base);
1273+
emit displaySymbolsWidget();
1274+
}
1275+
}
1276+
12631277
void CPUDisassembly::selectionGetSlot(SELECTIONDATA* selection)
12641278
{
12651279
selection->start = rvaToVa(getSelectionStart());

src/gui/Src/Gui/CPUDisassembly.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class CPUDisassembly : public Disassembly
3535
void displaySnowmanWidget();
3636
void displayLogWidget();
3737
void displayGraphWidget();
38+
void displaySymbolsWidget();
3839

3940
public slots:
4041
void setNewOriginHereActionSlot();
@@ -64,6 +65,7 @@ public slots:
6465
void findCallsSlot();
6566
void findPatternSlot();
6667
void findGUIDSlot();
68+
void findNamesSlot();
6769
void selectionGetSlot(SELECTIONDATA* selection);
6870
void selectionSetSlot(const SELECTIONDATA* selection);
6971
void selectionUpdatedSlot();
@@ -142,6 +144,7 @@ public slots:
142144
QAction* mFindCallsModule;
143145
QAction* mFindPatternModule;
144146
QAction* mFindGUIDModule;
147+
QAction* mFindNamesModule;
145148

146149
QAction* mFindCommandFunction;
147150
QAction* mFindConstantFunction;

src/gui/Src/Gui/MainWindow.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ MainWindow::MainWindow(QWidget* parent)
341341
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displaySnowmanWidget()), this, SLOT(displaySnowmanWidget()));
342342
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displayLogWidget()), this, SLOT(displayLogWidget()));
343343
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displayGraphWidget()), this, SLOT(displayGraphWidget()));
344+
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displaySymbolsWidget()), this, SLOT(displaySymbolWidget()));
344345
connect(mCpuWidget->getDisasmWidget(), SIGNAL(showPatches()), this, SLOT(patchWindow()));
345346

346347
connect(mGraphView, SIGNAL(displaySnowmanWidget()), this, SLOT(displaySnowmanWidget()));

src/gui/Src/Gui/SymbolView.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ SymbolView::SymbolView(QWidget* parent) : QWidget(parent), ui(new Ui::SymbolView
100100
connect(Bridge::getBridge(), SIGNAL(updateSymbolList(int, SYMBOLMODULEINFO*)), this, SLOT(updateSymbolList(int, SYMBOLMODULEINFO*)));
101101
connect(Bridge::getBridge(), SIGNAL(setSymbolProgress(int)), ui->symbolProgress, SLOT(setValue(int)));
102102
connect(Bridge::getBridge(), SIGNAL(symbolRefreshCurrent()), this, SLOT(symbolRefreshCurrent()));
103+
connect(Bridge::getBridge(), SIGNAL(symbolSelectModule(duint)), this, SLOT(symbolSelectModule(duint)));
103104
connect(mSearchListView, SIGNAL(listContextMenuSignal(QMenu*)), this, SLOT(symbolContextMenu(QMenu*)));
104105
connect(mSearchListView, SIGNAL(enterPressedSignal()), this, SLOT(enterPressedSlot()));
105106
connect(Config(), SIGNAL(colorsUpdated()), this, SLOT(updateStyle()));
@@ -361,6 +362,7 @@ void SymbolView::updateSymbolList(int module_count, SYMBOLMODULEINFO* modules)
361362
mModuleBaseList.insert(modName, modules[i].base);
362363
int party = DbgFunctions()->ModGetParty(modules[i].base);
363364
mModuleList->mList->setCellContent(i, 0, ToPtrString(modules[i].base));
365+
mModuleList->mList->setCellUserdata(i, 0, modules[i].base);
364366
mModuleList->mList->setCellContent(i, 1, modName);
365367
switch(party)
366368
{
@@ -430,6 +432,20 @@ void SymbolView::symbolFollowImport()
430432
}
431433
}
432434

435+
void SymbolView::symbolSelectModule(duint base)
436+
{
437+
for(dsint i = 0; i < mModuleList->mList->getRowCount(); i++)
438+
{
439+
if(mModuleList->mList->getCellUserdata(i, 0) == base)
440+
{
441+
mModuleList->mList->setSingleSelection(i);
442+
mModuleList->mSearchList->hide(); //This could be described as a hack, but you could also say it's like wiping sandpaper over your new white Tesla.
443+
mModuleList->mSearchBox->clear();
444+
break;
445+
}
446+
}
447+
}
448+
433449
void SymbolView::enterPressedSlot()
434450
{
435451
auto addr = DbgValFromString(mSearchListView->mCurList->getCellContent(mSearchListView->mCurList->getInitialSelection(), 0).toUtf8().constData());

src/gui/Src/Gui/SymbolView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ private slots:
3333
void symbolFollow();
3434
void symbolFollowDump();
3535
void symbolFollowImport();
36+
void symbolSelectModule(duint base);
3637
void enterPressedSlot();
3738
void symbolContextMenu(QMenu* wMenu);
3839
void symbolRefreshCurrent();

src/gui/Src/Utils/Configuration.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
495495
defaultShortcuts.insert("ActionFindReferencesToSelectedAddress", Shortcut({tr("Actions"), tr("Find References to Selected Address")}, "Ctrl+R"));
496496
defaultShortcuts.insert("ActionFindPattern", Shortcut({tr("Actions"), tr("Find Pattern")}, "Ctrl+B"));
497497
defaultShortcuts.insert("ActionFindPatternInModule", Shortcut({tr("Actions"), tr("Find Pattern in Current Module")}, "Ctrl+Shift+B"));
498+
defaultShortcuts.insert("ActionFindNamesInModule", Shortcut({tr("Actions"), tr("Find Names in Current Module")}, "Ctrl+N"));
498499
defaultShortcuts.insert("ActionFindReferences", Shortcut({tr("Actions"), tr("Find References")}, "Ctrl+R"));
499500
defaultShortcuts.insert("ActionXrefs", Shortcut({tr("Actions"), tr("xrefs...")}, "X"));
500501
defaultShortcuts.insert("ActionAnalyzeSingleFunction", Shortcut({tr("Actions"), tr("Analyze Single Function")}, "A"));

src/gui/images/names.png

668 Bytes
Loading

src/gui/resource.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,5 +313,6 @@
313313
<file>images/donation_qr.png</file>
314314
<file>images/breakpoint_memory_read.png</file>
315315
<file>images/lib.png</file>
316+
<file>images/names.png</file>
316317
</qresource>
317318
</RCC>

0 commit comments

Comments
 (0)