diff options
| author | kat <kat@vector35.com> | 2025-03-18 04:36:25 -0400 |
|---|---|---|
| committer | kat <kat@vector35.com> | 2025-03-18 04:36:25 -0400 |
| commit | 68fe4cee9501cc1e5072e81b03f86eb985ed6b5f (patch) | |
| tree | 248f0ac32e2df171f38ba2984f241d20b3c9dfd5 /view/sharedcache | |
| parent | 1bbb0e1dd640abe0278bf5bf947f9ae453f25373 (diff) | |
[SharedCache] Improvements to triage view; Fix double-click double-load issue, dont prompt on loading from symbol, auto-navigate to symbol when clicked, loading first if required
Diffstat (limited to 'view/sharedcache')
| -rw-r--r-- | view/sharedcache/ui/dsctriage.cpp | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/view/sharedcache/ui/dsctriage.cpp b/view/sharedcache/ui/dsctriage.cpp index 959153ce..4a458f00 100644 --- a/view/sharedcache/ui/dsctriage.cpp +++ b/view/sharedcache/ui/dsctriage.cpp @@ -453,6 +453,9 @@ void SymbolTableModel::updateSymbols() { } const SharedCacheAPI::DSCSymbol& SymbolTableModel::symbolAt(int row) const { + if (row < 0 || row >= static_cast<int>(m_symbols.size())) { + return m_symbols.at(0); + } return m_symbols.at(row); } @@ -703,15 +706,6 @@ DSCTriageView::DSCTriageView(QWidget* parent, BinaryViewRef data) : QWidget(pare m_cache->LoadImageWithInstallName(name); }); }); - connect(loadImageTable, &FilterableTableView::doubleClicked, this, [=](const QModelIndex& index) - { - auto name = loadImageModel->item(index.row(), 0)->text().toStdString(); - WorkerPriorityEnqueue([this, name]() - { - m_cache->LoadImageWithInstallName(name); - }); - }); - auto loadImageLayout = new QVBoxLayout; loadImageLayout->addWidget(loadImageFilterEdit); loadImageLayout->addWidget(loadImageTable); @@ -758,24 +752,28 @@ DSCTriageView::DSCTriageView(QWidget* parent, BinaryViewRef data) : QWidget(pare symbolSearch->setSelectionBehavior(QAbstractItemView::SelectRows); symbolSearch->setSelectionMode(QAbstractItemView::SingleSelection); + std::function<void(uint64_t)> navigateToAddress = [=](uint64_t addr){ + ExecuteOnMainThread([addr, this](){ + if (BinaryNinja::Settings::Instance()->Get<bool>("ui.view.graph.preferred")) + m_data->Navigate("Graph:DSCView", addr); + else + m_data->Navigate("Linear:DSCView", addr); + }); + }; + connect(symbolSearch, &SymbolTableView::activated, this, [=](const QModelIndex& index) { auto symbol = symbolSearch->getSymbolAtRow(index.row()); - auto dialog = new QMessageBox(this); - dialog->setText("Load " + QString::fromStdString(symbol.image) + "?"); - dialog->setStandardButtons(QMessageBox::Yes | QMessageBox::No); - - connect(dialog, &QMessageBox::buttonClicked, this, [=](QAbstractButton* button) + WorkerPriorityEnqueue([this, symbol, navigateToAddress]() { - if (button == dialog->button(QMessageBox::Yes)) + if (m_data->IsValidOffset(symbol.address)) + navigateToAddress(symbol.address); + else { - WorkerPriorityEnqueue([this, symbol]() - { - m_cache->LoadImageWithInstallName(symbol.image); - }); + m_cache->LoadImageWithInstallName(symbol.image); + navigateToAddress(symbol.address); } }); - dialog->exec(); }); m_triageTabs->addTab(symbolWidget, "Symbol Search"); |
