summaryrefslogtreecommitdiff
path: root/view/sharedcache
diff options
context:
space:
mode:
authorkat <kat@vector35.com>2025-03-18 04:36:25 -0400
committerkat <kat@vector35.com>2025-03-18 04:36:25 -0400
commit68fe4cee9501cc1e5072e81b03f86eb985ed6b5f (patch)
tree248f0ac32e2df171f38ba2984f241d20b3c9dfd5 /view/sharedcache
parent1bbb0e1dd640abe0278bf5bf947f9ae453f25373 (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.cpp38
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");