gui improvements (#1272)
* gui improvements * removed duplicate shortcut for refresh in graph
This commit is contained in:
parent
690bb24a6d
commit
37137f872f
|
@ -1025,6 +1025,10 @@ void AbstractTableView::addColumnAt(int width, const QString & title, bool isCli
|
|||
Column_t wColumn;
|
||||
int wCurrentCount;
|
||||
|
||||
// Fix invisible columns near the edge of the screen
|
||||
if(width < 20)
|
||||
width = 20;
|
||||
|
||||
wHeaderButton.isPressed = false;
|
||||
wHeaderButton.isClickable = isClickable;
|
||||
wHeaderButton.isMouseOver = false;
|
||||
|
|
|
@ -346,7 +346,7 @@ void CPUDisassembly::setupRightClickContextMenu()
|
|||
return menu->actions().length() != 0; //only add this menu if there is something to follow
|
||||
});
|
||||
|
||||
mMenuBuilder->addAction(makeAction(DIcon("memmap_find_address_page.png"), tr("Follow in Memory Map"), SLOT(followInMemoryMapSlot())));
|
||||
mMenuBuilder->addAction(makeShortcutAction(DIcon("memmap_find_address_page.png"), tr("Follow in Memory Map"), SLOT(followInMemoryMapSlot()), "ActionFollowMemMap"));
|
||||
|
||||
mMenuBuilder->addAction(makeShortcutAction(DIcon("source.png"), tr("Open Source File"), SLOT(openSourceSlot()), "ActionOpenSourceFile"), [this](QMenu*)
|
||||
{
|
||||
|
@ -573,6 +573,11 @@ void CPUDisassembly::setupRightClickContextMenu()
|
|||
{
|
||||
return DbgFunctions()->ModBaseFromAddr(rvaToVa(getInitialSelection())) != 0;
|
||||
});
|
||||
MenuBuilder* mSearchFunctionMenu = new MenuBuilder(this, [this](QMenu*)
|
||||
{
|
||||
duint start, end;
|
||||
return DbgFunctionGet(rvaToVa(getInitialSelection()), &start, &end);
|
||||
});
|
||||
MenuBuilder* mSearchAllMenu = new MenuBuilder(this);
|
||||
|
||||
// Search in Current Region menu
|
||||
|
@ -603,6 +608,20 @@ void CPUDisassembly::setupRightClickContextMenu()
|
|||
mSearchModuleMenu->addAction(mFindPatternModule);
|
||||
mSearchModuleMenu->addAction(mFindGUIDModule);
|
||||
|
||||
// Search in Current Function menu
|
||||
mFindCommandFunction = makeAction(DIcon("search_for_command.png"), tr("C&ommand"), SLOT(findCommandSlot()));
|
||||
mFindConstantFunction = makeAction(DIcon("search_for_constant.png"), tr("&Constant"), SLOT(findConstantSlot()));
|
||||
mFindStringsFunction = makeAction(DIcon("search_for_string.png"), tr("&String references"), SLOT(findStringsSlot()));
|
||||
mFindCallsFunction = makeAction(DIcon("call.png"), tr("&Intermodular calls"), SLOT(findCallsSlot()));
|
||||
mFindPatternFunction = makeAction(DIcon("search_for_pattern.png"), tr("&Pattern"), SLOT(findPatternSlot()));
|
||||
mFindGUIDFunction = makeAction(DIcon("guid.png"), tr("&GUID"), SLOT(findGUIDSlot()));
|
||||
mSearchFunctionMenu->addAction(mFindCommandFunction);
|
||||
mSearchFunctionMenu->addAction(mFindConstantFunction);
|
||||
mSearchFunctionMenu->addAction(mFindStringsFunction);
|
||||
mSearchFunctionMenu->addAction(mFindCallsFunction);
|
||||
mSearchFunctionMenu->addAction(mFindPatternFunction);
|
||||
mSearchFunctionMenu->addAction(mFindGUIDFunction);
|
||||
|
||||
// Search in All Modules menu
|
||||
mFindCommandAll = makeAction(DIcon("search_for_command.png"), tr("C&ommand"), SLOT(findCommandSlot()));
|
||||
mFindConstantAll = makeAction(DIcon("search_for_constant.png"), tr("&Constant"), SLOT(findConstantSlot()));
|
||||
|
@ -617,6 +636,9 @@ void CPUDisassembly::setupRightClickContextMenu()
|
|||
|
||||
searchMenu->addMenu(makeMenu(DIcon("search_current_region.png"), tr("Current Region")), mSearchRegionMenu);
|
||||
searchMenu->addMenu(makeMenu(DIcon("search_current_module.png"), tr("Current Module")), mSearchModuleMenu);
|
||||
QMenu* searchFunctionMenu = makeMenu(tr("Current Function"));
|
||||
searchFunctionMenu->setEnabled(false);
|
||||
searchMenu->addMenu(searchFunctionMenu, mSearchFunctionMenu);
|
||||
searchMenu->addMenu(makeMenu(DIcon("search_all_modules.png"), tr("All Modules")), mSearchAllMenu);
|
||||
mMenuBuilder->addMenu(makeMenu(DIcon("search-for.png"), tr("&Search for")), searchMenu);
|
||||
|
||||
|
@ -1159,6 +1181,8 @@ void CPUDisassembly::findConstantSlot()
|
|||
refFindType = 1;
|
||||
else if(sender() == mFindConstantAll)
|
||||
refFindType = 2;
|
||||
else if(sender() == mFindConstantFunction)
|
||||
refFindType = -1;
|
||||
|
||||
WordEditDialog wordEdit(this);
|
||||
wordEdit.setup(tr("Enter Constant"), 0, sizeof(dsint));
|
||||
|
@ -1167,7 +1191,14 @@ void CPUDisassembly::findConstantSlot()
|
|||
|
||||
auto addrText = ToHexString(rvaToVa(getInitialSelection()));
|
||||
auto constText = ToHexString(wordEdit.getVal());
|
||||
DbgCmdExec(QString("findref %1, %2, 0, %3").arg(constText).arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
if(refFindType != -1)
|
||||
DbgCmdExec(QString("findref %1, %2, 0, %3").arg(constText).arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
else
|
||||
{
|
||||
duint start, end;
|
||||
if(DbgFunctionGet(rvaToVa(getInitialSelection()), &start, &end))
|
||||
DbgCmdExec(QString("findref %1, %2, %3, 0").arg(constText).arg(ToPtrString(start)).arg(ToPtrString(end - start)).toUtf8().constData());
|
||||
}
|
||||
emit displayReferencesWidget();
|
||||
}
|
||||
|
||||
|
@ -1180,6 +1211,13 @@ void CPUDisassembly::findStringsSlot()
|
|||
refFindType = 1;
|
||||
else if(sender() == mFindStringsAll)
|
||||
refFindType = 2;
|
||||
else if(sender() == mFindStringsFunction)
|
||||
{
|
||||
duint start, end;
|
||||
if(DbgFunctionGet(rvaToVa(getInitialSelection()), &start, &end))
|
||||
DbgCmdExec(QString("strref %1, %2, 0").arg(ToPtrString(start)).arg(ToPtrString(end - start)).toUtf8().constData());
|
||||
return;
|
||||
}
|
||||
|
||||
auto addrText = ToHexString(rvaToVa(getInitialSelection()));
|
||||
DbgCmdExec(QString("strref %1, 0, %2").arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
|
@ -1196,9 +1234,18 @@ void CPUDisassembly::findCallsSlot()
|
|||
refFindType = 1;
|
||||
else if(sender() == mFindCallsAll)
|
||||
refFindType = 2;
|
||||
else if(sender() == mFindCallsFunction)
|
||||
refFindType = -1;
|
||||
|
||||
auto addrText = ToHexString(rvaToVa(getInitialSelection()));
|
||||
DbgCmdExec(QString("modcallfind %1, 0, %2").arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
if(refFindType != -1)
|
||||
DbgCmdExec(QString("modcallfind %1, 0, %2").arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
else
|
||||
{
|
||||
duint start, end;
|
||||
if(DbgFunctionGet(rvaToVa(getInitialSelection()), &start, &end))
|
||||
DbgCmdExec(QString("modcallfind %1, %2, 0").arg(addrText).arg(ToPtrString(start)).arg(ToPtrString(end - start)).toUtf8().constData());
|
||||
}
|
||||
emit displayReferencesWidget();
|
||||
}
|
||||
|
||||
|
@ -1222,6 +1269,14 @@ void CPUDisassembly::findPatternSlot()
|
|||
if(base)
|
||||
command = QString("findall %1, %2, %3").arg(ToHexString(base), hexEdit.mHexEdit->pattern(), ToHexString(DbgFunctions()->ModSizeFromAddr(base)));
|
||||
}
|
||||
if(sender() == mFindPatternFunction)
|
||||
{
|
||||
duint start, end;
|
||||
if(DbgFunctionGet(addr, &start, &end))
|
||||
command = QString("findall %1, %2, %3").arg(ToPtrString(start)).arg(hexEdit.mHexEdit->pattern()).arg(ToPtrString(end - start));
|
||||
else
|
||||
return;
|
||||
}
|
||||
if(!command.length())
|
||||
command = QString("findall %1, %2").arg(ToHexString(addr), hexEdit.mHexEdit->pattern());
|
||||
|
||||
|
@ -1238,9 +1293,18 @@ void CPUDisassembly::findGUIDSlot()
|
|||
refFindType = 1;
|
||||
else if(sender() == mFindGUIDAll)
|
||||
refFindType = 2;
|
||||
else if(sender() == mFindGUIDFunction)
|
||||
refFindType = -1;
|
||||
|
||||
auto addrText = ToHexString(rvaToVa(getInitialSelection()));
|
||||
DbgCmdExec(QString("findguid %1, 0, %2").arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
if(refFindType == -1)
|
||||
DbgCmdExec(QString("findguid %1, 0, %2").arg(addrText).arg(refFindType).toUtf8().constData());
|
||||
else
|
||||
{
|
||||
duint start, end;
|
||||
if(DbgFunctionGet(rvaToVa(getInitialSelection()), &start, &end))
|
||||
DbgCmdExec(QString("findguid %1, %2, 0").arg(ToPtrString(start)).arg(ToPtrString(end - start)).toUtf8().constData());
|
||||
}
|
||||
emit displayReferencesWidget();
|
||||
}
|
||||
|
||||
|
@ -1548,6 +1612,8 @@ void CPUDisassembly::findCommandSlot()
|
|||
refFindType = 0;
|
||||
else if(sender() == mFindCommandModule)
|
||||
refFindType = 1;
|
||||
else if(sender() == mFindCommandFunction)
|
||||
refFindType = -1;
|
||||
else if(sender() == mFindCommandAll)
|
||||
refFindType = 2;
|
||||
|
||||
|
@ -1574,7 +1640,14 @@ void CPUDisassembly::findCommandSlot()
|
|||
QString addr_text = ToPtrString(va);
|
||||
|
||||
dsint size = mMemPage->getSize();
|
||||
DbgCmdExec(QString("findasm \"%1\", %2, .%3, %4").arg(mLineEdit.editText).arg(addr_text).arg(size).arg(refFindType).toUtf8().constData());
|
||||
if(refFindType != -1)
|
||||
DbgCmdExec(QString("findasm \"%1\", %2, .%3, %4").arg(mLineEdit.editText).arg(addr_text).arg(size).arg(refFindType).toUtf8().constData());
|
||||
else
|
||||
{
|
||||
duint start, end;
|
||||
if(DbgFunctionGet(va, &start, &end))
|
||||
DbgCmdExec(QString("findasm \"%1\", %2, .%3, 0").arg(mLineEdit.editText).arg(ToPtrString(start)).arg(ToPtrString(end - start)).toUtf8().constData());
|
||||
}
|
||||
|
||||
emit displayReferencesWidget();
|
||||
}
|
||||
|
|
|
@ -145,6 +145,13 @@ private:
|
|||
QAction* mFindPatternModule;
|
||||
QAction* mFindGUIDModule;
|
||||
|
||||
QAction* mFindCommandFunction;
|
||||
QAction* mFindConstantFunction;
|
||||
QAction* mFindStringsFunction;
|
||||
QAction* mFindCallsFunction;
|
||||
QAction* mFindPatternFunction;
|
||||
QAction* mFindGUIDFunction;
|
||||
|
||||
QAction* mFindCommandAll;
|
||||
QAction* mFindConstantAll;
|
||||
QAction* mFindStringsAll;
|
||||
|
|
|
@ -218,13 +218,13 @@ void CPUStack::setupContextMenu()
|
|||
gotoMenu->addAction(makeShortcutAction(DIcon("geolocation-goto.png"), tr("Go to &Expression"), SLOT(gotoExpressionSlot()), "ActionGotoExpression"));
|
||||
|
||||
//Go to Base of Stack Frame
|
||||
gotoMenu->addAction(makeAction(DIcon("neworigin.png"), tr("Go to Base of Stack Frame"), SLOT(gotoFrameBaseSlot())));
|
||||
gotoMenu->addAction(makeShortcutAction(DIcon("neworigin.png"), tr("Go to Base of Stack Frame"), SLOT(gotoFrameBaseSlot()), "ActionGotoBaseOfStackFrame"));
|
||||
|
||||
//Go to Previous Frame
|
||||
gotoMenu->addAction(makeAction(DIcon("previous.png"), tr("Go to Previous Stack Frame"), SLOT(gotoPreviousFrameSlot())));
|
||||
gotoMenu->addAction(makeShortcutAction(DIcon("previous.png"), tr("Go to Previous Stack Frame"), SLOT(gotoPreviousFrameSlot()), "ActionGotoPrevStackFrame"));
|
||||
|
||||
//Go to Next Frame
|
||||
gotoMenu->addAction(makeAction(DIcon("next.png"), tr("Go to Next Stack Frame"), SLOT(gotoNextFrameSlot())));
|
||||
gotoMenu->addAction(makeShortcutAction(DIcon("next.png"), tr("Go to Next Stack Frame"), SLOT(gotoNextFrameSlot()), "ActionGotoNextStackFrame"));
|
||||
|
||||
//Go to Previous
|
||||
gotoMenu->addAction(makeShortcutAction(DIcon("previous.png"), tr("Go to Previous"), SLOT(gotoPreviousSlot()), "ActionGotoPrevious"), [this](QMenu*)
|
||||
|
@ -241,11 +241,15 @@ void CPUStack::setupContextMenu()
|
|||
mMenuBuilder->addMenu(makeMenu(DIcon("goto.png"), tr("&Go to")), gotoMenu);
|
||||
|
||||
//Freeze the stack
|
||||
mMenuBuilder->addAction(mFreezeStack = makeAction(DIcon("freeze.png"), tr("Freeze the stack"), SLOT(freezeStackSlot())));
|
||||
mMenuBuilder->addAction(mFreezeStack = makeShortcutAction(DIcon("freeze.png"), tr("Freeze the stack"), SLOT(freezeStackSlot()), "ActionFreezeStack"));
|
||||
mFreezeStack->setCheckable(true);
|
||||
|
||||
//Follow in Memory Map
|
||||
mMenuBuilder->addAction(makeAction(DIcon("memmap_find_address_page.png"), tr("Follow in Memory Map"), SLOT(followInMemoryMapSlot())));
|
||||
mMenuBuilder->addAction(makeShortcutAction(DIcon("memmap_find_address_page.png"), ArchValue(tr("Follow DWORD in Memory Map"), tr("Follow QWORD in Memory Map")), SLOT(followInMemoryMapSlot()), "ActionFollowMemMap"), [this](QMenu*)
|
||||
{
|
||||
duint ptr;
|
||||
return DbgMemRead(rvaToVa(getInitialSelection()), (unsigned char*)&ptr, sizeof(ptr)) && DbgMemIsValidReadPtr(ptr);
|
||||
});
|
||||
|
||||
auto followStackName = ArchValue(tr("Follow DWORD in &Stack"), tr("Follow QWORD in &Stack"));
|
||||
mFollowStack = makeAction(DIcon("stack.png"), followStackName, SLOT(followStackSlot()));
|
||||
|
@ -1005,7 +1009,7 @@ void CPUStack::dbgStateChangedSlot(DBGSTATE state)
|
|||
|
||||
void CPUStack::followInMemoryMapSlot()
|
||||
{
|
||||
DbgCmdExec(QString("memmapdump %1").arg(ToHexString(rvaToVa(getInitialSelection()))).toUtf8().constData());
|
||||
DbgCmdExec(QString("memmapdump [%1]").arg(ToHexString(rvaToVa(getInitialSelection()))).toUtf8().constData());
|
||||
}
|
||||
|
||||
void CPUStack::followInDumpSlot()
|
||||
|
|
|
@ -8,7 +8,8 @@ CallStackView::CallStackView(StdTable* parent) : StdTable(parent)
|
|||
addColumnAt(8 + charwidth * sizeof(dsint) * 2, tr("Address"), true); //address in the stack
|
||||
addColumnAt(8 + charwidth * sizeof(dsint) * 2, tr("To"), true); //return to
|
||||
addColumnAt(8 + charwidth * sizeof(dsint) * 2, tr("From"), true); //return from
|
||||
addColumnAt(0, tr("Comment"), true);
|
||||
addColumnAt(8 + charwidth * sizeof(dsint) * 2, tr("Size"), true); //size
|
||||
addColumnAt(10, tr("Comment"), true);
|
||||
loadColumnFromConfig("CallStack");
|
||||
|
||||
connect(Bridge::getBridge(), SIGNAL(updateCallStack()), this, SLOT(updateCallStack()));
|
||||
|
@ -61,7 +62,11 @@ void CallStackView::updateCallStack()
|
|||
addrText = ToPtrString(callstack.entries[i].from);
|
||||
setCellContent(i, 2, addrText);
|
||||
}
|
||||
setCellContent(i, 3, callstack.entries[i].comment);
|
||||
if(i != callstack.total - 1)
|
||||
setCellContent(i, 3, ToHexString(callstack.entries[i + 1].addr - callstack.entries[i].addr));
|
||||
else
|
||||
setCellContent(i, 3, "");
|
||||
setCellContent(i, 4, callstack.entries[i].comment);
|
||||
}
|
||||
if(callstack.total)
|
||||
BridgeFree(callstack.entries);
|
||||
|
|
|
@ -1493,7 +1493,7 @@ void DisassemblerGraphView::setupContextMenu()
|
|||
mMenuBuilder->addAction(mToggleOverview = makeShortcutAction(tr("&Save as image"), SLOT(saveImageSlot()), "ActionGraphSaveImage"));
|
||||
mMenuBuilder->addAction(mToggleOverview = makeShortcutAction(DIcon("graph.png"), tr("&Overview"), SLOT(toggleOverviewSlot()), "ActionGraphToggleOverview"));
|
||||
mMenuBuilder->addAction(mToggleSyncOrigin = makeShortcutAction(DIcon("lock.png"), tr("&Sync with origin"), SLOT(toggleSyncOriginSlot()), "ActionGraphSyncOrigin"));
|
||||
mMenuBuilder->addAction(makeShortcutAction(DIcon("sync.png"), tr("&Refresh"), SLOT(refreshSlot()), "ActionGraphRefresh"));
|
||||
mMenuBuilder->addAction(makeShortcutAction(DIcon("sync.png"), tr("&Refresh"), SLOT(refreshSlot()), "ActionRefresh"));
|
||||
MenuBuilder* gotoMenu = new MenuBuilder(this);
|
||||
gotoMenu->addAction(makeShortcutAction(DIcon("geolocation-goto.png"), tr("Expression"), SLOT(gotoExpressionSlot()), "ActionGotoExpression"));
|
||||
gotoMenu->addAction(makeShortcutAction(DIcon("cbp.png"), tr("Origin"), SLOT(gotoOriginSlot()), "ActionGotoOrigin"));
|
||||
|
|
|
@ -317,6 +317,7 @@ MainWindow::MainWindow(QWidget* parent)
|
|||
connect(ui->actionAnimateCommand, SIGNAL(triggered()), this, SLOT(animateCommandSlot()));
|
||||
connect(ui->actionSetInitializationScript, SIGNAL(triggered()), this, SLOT(setInitialzationScript()));
|
||||
connect(ui->actionCustomizeMenus, SIGNAL(triggered()), this, SLOT(customizeMenu()));
|
||||
connect(ui->actionVariables, SIGNAL(triggered()), this, SLOT(displayVariables()));
|
||||
|
||||
connect(mCpuWidget->getDisasmWidget(), SIGNAL(updateWindowTitle(QString)), this, SLOT(updateWindowTitleSlot(QString)));
|
||||
connect(mCpuWidget->getDisasmWidget(), SIGNAL(displayReferencesWidget()), this, SLOT(displayReferencesWidget()));
|
||||
|
@ -402,7 +403,7 @@ void MainWindow::setupLanguagesMenu()
|
|||
languageMenu->setIcon(DIcon("codepage.png"));
|
||||
QLocale enUS(QLocale::English, QLocale::UnitedStates);
|
||||
QString wCurrentLocale(currentLocale);
|
||||
QAction* action_enUS = new QAction(QString("[%1] %2 - %3").arg(enUS.name()).arg(enUS.nativeLanguageName()).arg(enUS.nativeCountryName()), languageMenu);
|
||||
QAction* action_enUS = new QAction(QString("[%1]%2 - %3").arg(enUS.name()).arg(enUS.nativeLanguageName()).arg(enUS.nativeCountryName()), languageMenu);
|
||||
connect(action_enUS, SIGNAL(triggered()), this, SLOT(chooseLanguage()));
|
||||
action_enUS->setCheckable(true);
|
||||
action_enUS->setChecked(false);
|
||||
|
@ -577,6 +578,7 @@ void MainWindow::refreshShortcuts()
|
|||
setGlobalShortcut(ui->actionLabels, ConfigShortcut("ViewLabels"));
|
||||
setGlobalShortcut(ui->actionBookmarks, ConfigShortcut("ViewBookmarks"));
|
||||
setGlobalShortcut(ui->actionFunctions, ConfigShortcut("ViewFunctions"));
|
||||
setGlobalShortcut(ui->actionVariables, ConfigShortcut("ViewVariables"));
|
||||
setGlobalShortcut(ui->actionSnowman, ConfigShortcut("ViewSnowman"));
|
||||
setGlobalShortcut(ui->actionHandles, ConfigShortcut("ViewHandles"));
|
||||
setGlobalShortcut(ui->actionGraph, ConfigShortcut("ViewGraph"));
|
||||
|
@ -613,6 +615,10 @@ void MainWindow::refreshShortcuts()
|
|||
setGlobalShortcut(ui->actionAnimateInto, ConfigShortcut("DebugAnimateInto"));
|
||||
setGlobalShortcut(ui->actionAnimateOver, ConfigShortcut("DebugAnimateOver"));
|
||||
setGlobalShortcut(ui->actionAnimateCommand, ConfigShortcut("DebugAnimateCommand"));
|
||||
setGlobalShortcut(ui->actionTRTIIT, ConfigShortcut("DebugTraceIntoIntoTracerecord"));
|
||||
setGlobalShortcut(ui->actionTRTOIT, ConfigShortcut("DebugTraceOverIntoTracerecord"));
|
||||
setGlobalShortcut(ui->actionTRTIBT, ConfigShortcut("DebugTraceIntoBeyondTracerecord"));
|
||||
setGlobalShortcut(ui->actionTRTOBT, ConfigShortcut("DebugTraceOverBeyondTracerecord"));
|
||||
|
||||
setGlobalShortcut(ui->actionScylla, ConfigShortcut("PluginsScylla"));
|
||||
|
||||
|
@ -793,6 +799,12 @@ void MainWindow::displayMemMapWidget()
|
|||
showQWidgetTab(mMemMapView);
|
||||
}
|
||||
|
||||
void MainWindow::displayVariables()
|
||||
{
|
||||
DbgCmdExec("varlist");
|
||||
showQWidgetTab(mReferenceManager);
|
||||
}
|
||||
|
||||
void MainWindow::displayLogWidget()
|
||||
{
|
||||
showQWidgetTab(mLogView);
|
||||
|
|
|
@ -83,6 +83,7 @@ public slots:
|
|||
void displayReferencesWidget();
|
||||
void displayThreadsWidget();
|
||||
void displaySnowmanWidget();
|
||||
void displayVariables();
|
||||
void displayGraphWidget();
|
||||
void displayPreviousTab();
|
||||
void displayNextTab();
|
||||
|
|
|
@ -71,6 +71,7 @@
|
|||
<addaction name="actionLabels"/>
|
||||
<addaction name="actionBookmarks"/>
|
||||
<addaction name="actionFunctions"/>
|
||||
<addaction name="actionVariables"/>
|
||||
<addaction name="actionSnowman"/>
|
||||
<addaction name="actionHandles"/>
|
||||
<addaction name="actionGraph"/>
|
||||
|
@ -1121,6 +1122,11 @@
|
|||
<string>Hide Tab</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionVariables">
|
||||
<property name="text">
|
||||
<string>&Variables</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources>
|
||||
|
|
|
@ -28,7 +28,6 @@ MemoryMapView::MemoryMapView(StdTable* parent)
|
|||
addColumnAt(8 + charwidth * 5, tr("Type"), false, tr("Allocation Type")); //allocation type
|
||||
addColumnAt(8 + charwidth * 11, tr("Protection"), false, tr("Current Protection")); //current protection
|
||||
addColumnAt(8 + charwidth * 8, tr("Initial"), false, tr("Allocation Protection")); //allocation protection
|
||||
addColumnAt(100, "", false);
|
||||
loadColumnFromConfig("MemoryMap");
|
||||
|
||||
connect(Bridge::getBridge(), SIGNAL(updateMemory()), this, SLOT(refreshMap()));
|
||||
|
|
|
@ -132,6 +132,13 @@ void SymbolView::setupContextMenu()
|
|||
mFollowModuleEntryAction = new QAction(disassembler, tr("Follow &Entry Point in Disassembler"), this);
|
||||
connect(mFollowModuleEntryAction, SIGNAL(triggered()), this, SLOT(moduleEntryFollow()));
|
||||
|
||||
mFollowInMemMap = new QAction(DIcon("memmap_find_address_page.png"), tr("Follow in Memory Map"), this);
|
||||
mFollowInMemMap->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
||||
this->addAction(mFollowInMemMap);
|
||||
mModuleList->mList->addAction(mFollowInMemMap);
|
||||
mModuleList->mSearchList->addAction(mFollowInMemMap);
|
||||
connect(mFollowInMemMap, SIGNAL(triggered()), this, SLOT(moduleFollowMemMap()));
|
||||
|
||||
mDownloadSymbolsAction = new QAction(DIcon("pdb.png"), tr("&Download Symbols for This Module"), this);
|
||||
mDownloadSymbolsAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
||||
this->addAction(mDownloadSymbolsAction);
|
||||
|
@ -211,6 +218,7 @@ void SymbolView::refreshShortcutsSlot()
|
|||
mDownloadSymbolsAction->setShortcut(ConfigShortcut("ActionDownloadSymbol"));
|
||||
mDownloadAllSymbolsAction->setShortcut(ConfigShortcut("ActionDownloadAllSymbol"));
|
||||
mCopyPathAction->setShortcut(ConfigShortcut("ActionCopy"));
|
||||
mFollowInMemMap->setShortcut(ConfigShortcut("ActionFollowMemMap"));
|
||||
}
|
||||
|
||||
void SymbolView::updateStyle()
|
||||
|
@ -359,6 +367,7 @@ void SymbolView::moduleContextMenu(QMenu* wMenu)
|
|||
|
||||
wMenu->addAction(mFollowModuleAction);
|
||||
wMenu->addAction(mFollowModuleEntryAction);
|
||||
wMenu->addAction(mFollowInMemMap);
|
||||
wMenu->addAction(mDownloadSymbolsAction);
|
||||
wMenu->addAction(mDownloadAllSymbolsAction);
|
||||
duint modbase = DbgValFromString(mModuleList->mCurList->getCellContent(mModuleList->mCurList->getInitialSelection(), 0).toUtf8().constData());
|
||||
|
@ -587,6 +596,12 @@ void SymbolView::moduleSetParty()
|
|||
}
|
||||
}
|
||||
|
||||
void SymbolView::moduleFollowMemMap()
|
||||
{
|
||||
QString base = mModuleList->mCurList->getCellContent(mModuleList->mCurList->getInitialSelection(), 0);
|
||||
DbgCmdExec(("memmapdump " + base).toUtf8().constData());
|
||||
}
|
||||
|
||||
void SymbolView::emptySearchResultSlot()
|
||||
{
|
||||
// No result after search
|
||||
|
|
|
@ -45,6 +45,7 @@ private slots:
|
|||
void moduleSetUser();
|
||||
void moduleSetSystem();
|
||||
void moduleSetParty();
|
||||
void moduleFollowMemMap();
|
||||
void toggleBreakpoint();
|
||||
void toggleBookmark();
|
||||
void refreshShortcutsSlot();
|
||||
|
@ -79,6 +80,7 @@ private:
|
|||
QAction* mModSetSystemAction;
|
||||
QAction* mModSetPartyAction;
|
||||
QAction* mBrowseInExplorer;
|
||||
QAction* mFollowInMemMap;
|
||||
|
||||
static void cbSymbolEnum(SYMBOLINFO* symbol, void* user);
|
||||
};
|
||||
|
|
|
@ -244,7 +244,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
|
|||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "DLLBreakpoint", 8);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "ExceptionBreakpoint", 8);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "MemoryMap", 8);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "CallStack", 4);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "CallStack", 5);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "SEH", 4);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "Script", 3);
|
||||
AbstractTableView::setupColumnConfigDefaultValue(guiUint, "Thread", 14);
|
||||
|
@ -318,6 +318,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
|
|||
defaultShortcuts.insert("ViewLabels", Shortcut(tr("View -> Labels"), "Ctrl+Alt+L", true));
|
||||
defaultShortcuts.insert("ViewBookmarks", Shortcut(tr("View -> Bookmarks"), "Ctrl+Alt+B", true));
|
||||
defaultShortcuts.insert("ViewFunctions", Shortcut(tr("View -> Functions"), "Ctrl+Alt+F", true));
|
||||
defaultShortcuts.insert("ViewVariables", Shortcut(tr("View -> Variables"), "", true));
|
||||
defaultShortcuts.insert("ViewSnowman", Shortcut(tr("View -> Snowman"), "", true));
|
||||
defaultShortcuts.insert("ViewHandles", Shortcut(tr("View -> Handles"), "", true));
|
||||
defaultShortcuts.insert("ViewGraph", Shortcut(tr("View -> Graph"), "Alt+G", true));
|
||||
|
@ -354,6 +355,10 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
|
|||
defaultShortcuts.insert("DebugAnimateInto", Shortcut(tr("Debug -> Animate into"), "Ctrl+F7", true));
|
||||
defaultShortcuts.insert("DebugAnimateOver", Shortcut(tr("Debug -> Animate over"), "Ctrl+F8", true));
|
||||
defaultShortcuts.insert("DebugAnimateCommand", Shortcut(tr("Debug -> Animate command"), "", true));
|
||||
defaultShortcuts.insert("DebugTraceIntoIntoTracerecord", Shortcut(tr("Debug -> Trace into into trace record"), "", true));
|
||||
defaultShortcuts.insert("DebugTraceOverIntoTracerecord", Shortcut(tr("Debug -> Trace over into trace record"), "", true));
|
||||
defaultShortcuts.insert("DebugTraceIntoBeyondTracerecord", Shortcut(tr("Debug -> Trace into beyond trace record"), "", true));
|
||||
defaultShortcuts.insert("DebugTraceOverBeyondTracerecord", Shortcut(tr("Debug -> Trace over beyond trace record"), "", true));
|
||||
|
||||
defaultShortcuts.insert("PluginsScylla", Shortcut(tr("Plugins -> Scylla"), "Ctrl+I", true));
|
||||
|
||||
|
@ -488,7 +493,6 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
|
|||
defaultShortcuts.insert("ActionGraphFollowDisassembler", Shortcut(tr("Actions -> Graph -> Follow in disassembler"), "Shift+Return"));
|
||||
defaultShortcuts.insert("ActionGraphSaveImage", Shortcut(tr("Actions -> Graph -> Save as image"), "I"));
|
||||
defaultShortcuts.insert("ActionGraphToggleOverview", Shortcut(tr("Actions -> Graph -> Toggle overview"), "O"));
|
||||
defaultShortcuts.insert("ActionGraphRefresh", Shortcut(tr("Actions -> Graph -> Refresh"), "R"));
|
||||
defaultShortcuts.insert("ActionGraphSyncOrigin", Shortcut(tr("Actions -> Graph -> Toggle sync with origin"), "S"));
|
||||
defaultShortcuts.insert("ActionIncrementx87Stack", Shortcut(tr("Actions -> Increment x87 Stack")));
|
||||
defaultShortcuts.insert("ActionDecrementx87Stack", Shortcut(tr("Actions -> Decrement x87 Stack")));
|
||||
|
@ -500,6 +504,11 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
|
|||
defaultShortcuts.insert("ActionDownloadAllSymbol", Shortcut(tr("Actions -> Download Symbols for All Modules")));
|
||||
defaultShortcuts.insert("ActionCreateNewThreadHere", Shortcut(tr("Actions -> Create New Thread Here")));
|
||||
defaultShortcuts.insert("ActionOpenSourceFile", Shortcut(tr("Actions -> Open Source File")));
|
||||
defaultShortcuts.insert("ActionFollowMemMap", Shortcut(tr("Actions -> Follow in Memory Map")));
|
||||
defaultShortcuts.insert("ActionFreezeStack", Shortcut(tr("Actions -> Freeze the stack")));
|
||||
defaultShortcuts.insert("ActionGotoBaseOfStackFrame", Shortcut(tr("Actions -> Go to Base of Stack Frame")));
|
||||
defaultShortcuts.insert("ActionGotoPrevStackFrame", Shortcut(tr("Actions -> Go to Previous Stack Frame")));
|
||||
defaultShortcuts.insert("ActionGotoNextStackFrame", Shortcut(tr("Actions -> Go to Next Stack Frame")));
|
||||
|
||||
Shortcuts = defaultShortcuts;
|
||||
|
||||
|
|
Loading…
Reference in New Issue