1
0
Fork 0

GUI: implement OllyDbg's Find all names in current module (Ctrl+N)

Cheers to @R3MRUM from Twitter!
This commit is contained in:
Duncan Ogilvie 2017-12-08 03:10:10 +01:00
parent 37e83c9436
commit 188b74bc91
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
9 changed files with 38 additions and 0 deletions

View File

@ -156,6 +156,7 @@ signals:
void getDumpAttention();
void openTraceFile(const QString & fileName);
void updateTraceBrowser();
void symbolSelectModule(duint base);
private:
CRITICAL_SECTION csBridge;

View File

@ -594,12 +594,14 @@ void CPUDisassembly::setupRightClickContextMenu()
mFindCallsModule = makeAction(DIcon("call.png"), tr("&Intermodular calls"), SLOT(findCallsSlot()));
mFindPatternModule = makeShortcutAction(DIcon("search_for_pattern.png"), tr("&Pattern"), SLOT(findPatternSlot()), "ActionFindPatternInModule");
mFindGUIDModule = makeAction(DIcon("guid.png"), tr("&GUID"), SLOT(findGUIDSlot()));
mFindNamesModule = makeShortcutAction(DIcon("names.png"), tr("&Names"), SLOT(findNamesSlot()), "ActionFindNamesInModule");
mSearchModuleMenu->addAction(mFindCommandModule);
mSearchModuleMenu->addAction(mFindConstantModule);
mSearchModuleMenu->addAction(mFindStringsModule);
mSearchModuleMenu->addAction(mFindCallsModule);
mSearchModuleMenu->addAction(mFindPatternModule);
mSearchModuleMenu->addAction(mFindGUIDModule);
mSearchModuleMenu->addAction(mFindNamesModule);
// Search in Current Function menu
mFindCommandFunction = makeAction(DIcon("search_for_command.png"), tr("C&ommand"), SLOT(findCommandSlot()));
@ -1260,6 +1262,18 @@ void CPUDisassembly::findGUIDSlot()
emit displayReferencesWidget();
}
void CPUDisassembly::findNamesSlot()
{
if(sender() == mFindNamesModule)
{
auto base = DbgFunctions()->ModBaseFromAddr(rvaToVa(getInitialSelection()));
if(!base)
return;
Bridge::getBridge()->symbolSelectModule(base);
emit displaySymbolsWidget();
}
}
void CPUDisassembly::selectionGetSlot(SELECTIONDATA* selection)
{
selection->start = rvaToVa(getSelectionStart());

View File

@ -35,6 +35,7 @@ signals:
void displaySnowmanWidget();
void displayLogWidget();
void displayGraphWidget();
void displaySymbolsWidget();
public slots:
void setNewOriginHereActionSlot();
@ -64,6 +65,7 @@ public slots:
void findCallsSlot();
void findPatternSlot();
void findGUIDSlot();
void findNamesSlot();
void selectionGetSlot(SELECTIONDATA* selection);
void selectionSetSlot(const SELECTIONDATA* selection);
void selectionUpdatedSlot();
@ -142,6 +144,7 @@ private:
QAction* mFindCallsModule;
QAction* mFindPatternModule;
QAction* mFindGUIDModule;
QAction* mFindNamesModule;
QAction* mFindCommandFunction;
QAction* mFindConstantFunction;

View File

@ -341,6 +341,7 @@ MainWindow::MainWindow(QWidget* parent)
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displaySnowmanWidget()), this, SLOT(displaySnowmanWidget()));
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displayLogWidget()), this, SLOT(displayLogWidget()));
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displayGraphWidget()), this, SLOT(displayGraphWidget()));
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displaySymbolsWidget()), this, SLOT(displaySymbolWidget()));
connect(mCpuWidget->getDisasmWidget(), SIGNAL(showPatches()), this, SLOT(patchWindow()));
connect(mGraphView, SIGNAL(displaySnowmanWidget()), this, SLOT(displaySnowmanWidget()));

View File

@ -100,6 +100,7 @@ SymbolView::SymbolView(QWidget* parent) : QWidget(parent), ui(new Ui::SymbolView
connect(Bridge::getBridge(), SIGNAL(updateSymbolList(int, SYMBOLMODULEINFO*)), this, SLOT(updateSymbolList(int, SYMBOLMODULEINFO*)));
connect(Bridge::getBridge(), SIGNAL(setSymbolProgress(int)), ui->symbolProgress, SLOT(setValue(int)));
connect(Bridge::getBridge(), SIGNAL(symbolRefreshCurrent()), this, SLOT(symbolRefreshCurrent()));
connect(Bridge::getBridge(), SIGNAL(symbolSelectModule(duint)), this, SLOT(symbolSelectModule(duint)));
connect(mSearchListView, SIGNAL(listContextMenuSignal(QMenu*)), this, SLOT(symbolContextMenu(QMenu*)));
connect(mSearchListView, SIGNAL(enterPressedSignal()), this, SLOT(enterPressedSlot()));
connect(Config(), SIGNAL(colorsUpdated()), this, SLOT(updateStyle()));
@ -361,6 +362,7 @@ void SymbolView::updateSymbolList(int module_count, SYMBOLMODULEINFO* modules)
mModuleBaseList.insert(modName, modules[i].base);
int party = DbgFunctions()->ModGetParty(modules[i].base);
mModuleList->mList->setCellContent(i, 0, ToPtrString(modules[i].base));
mModuleList->mList->setCellUserdata(i, 0, modules[i].base);
mModuleList->mList->setCellContent(i, 1, modName);
switch(party)
{
@ -430,6 +432,20 @@ void SymbolView::symbolFollowImport()
}
}
void SymbolView::symbolSelectModule(duint base)
{
for(dsint i = 0; i < mModuleList->mList->getRowCount(); i++)
{
if(mModuleList->mList->getCellUserdata(i, 0) == base)
{
mModuleList->mList->setSingleSelection(i);
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.
mModuleList->mSearchBox->clear();
break;
}
}
}
void SymbolView::enterPressedSlot()
{
auto addr = DbgValFromString(mSearchListView->mCurList->getCellContent(mSearchListView->mCurList->getInitialSelection(), 0).toUtf8().constData());

View File

@ -33,6 +33,7 @@ private slots:
void symbolFollow();
void symbolFollowDump();
void symbolFollowImport();
void symbolSelectModule(duint base);
void enterPressedSlot();
void symbolContextMenu(QMenu* wMenu);
void symbolRefreshCurrent();

View File

@ -495,6 +495,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
defaultShortcuts.insert("ActionFindReferencesToSelectedAddress", Shortcut({tr("Actions"), tr("Find References to Selected Address")}, "Ctrl+R"));
defaultShortcuts.insert("ActionFindPattern", Shortcut({tr("Actions"), tr("Find Pattern")}, "Ctrl+B"));
defaultShortcuts.insert("ActionFindPatternInModule", Shortcut({tr("Actions"), tr("Find Pattern in Current Module")}, "Ctrl+Shift+B"));
defaultShortcuts.insert("ActionFindNamesInModule", Shortcut({tr("Actions"), tr("Find Names in Current Module")}, "Ctrl+N"));
defaultShortcuts.insert("ActionFindReferences", Shortcut({tr("Actions"), tr("Find References")}, "Ctrl+R"));
defaultShortcuts.insert("ActionXrefs", Shortcut({tr("Actions"), tr("xrefs...")}, "X"));
defaultShortcuts.insert("ActionAnalyzeSingleFunction", Shortcut({tr("Actions"), tr("Analyze Single Function")}, "A"));

BIN
src/gui/images/names.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 B

View File

@ -313,5 +313,6 @@
<file>images/donation_qr.png</file>
<file>images/breakpoint_memory_read.png</file>
<file>images/lib.png</file>
<file>images/names.png</file>
</qresource>
</RCC>