summaryrefslogtreecommitdiff
path: root/view/kernelcache/ui
diff options
context:
space:
mode:
authorkat <kat@vector35.com>2025-03-19 20:03:34 -0400
committerkat <kat@vector35.com>2025-03-19 20:06:23 -0400
commit7d66d87a4600c8954c585c3c690546fc56903d44 (patch)
treee6eade9f6b277a3dde4e3e8b15969dd6f9c40226 /view/kernelcache/ui
parent9169a13c818fc7f3b09246360c31e200b01bda23 (diff)
[KernelCache] 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/kernelcache/ui')
-rw-r--r--view/kernelcache/ui/kctriage.cpp42
1 files changed, 16 insertions, 26 deletions
diff --git a/view/kernelcache/ui/kctriage.cpp b/view/kernelcache/ui/kctriage.cpp
index 5f0fa9ce..3a8699a7 100644
--- a/view/kernelcache/ui/kctriage.cpp
+++ b/view/kernelcache/ui/kctriage.cpp
@@ -258,20 +258,6 @@ KCTriageView::KCTriageView(QWidget* parent, BinaryViewRef data) : QWidget(parent
WorkerPriorityEnqueue([this, name]() { m_cache->LoadImageWithInstallName(name); });
}
});
- connect(loadImageTable, &FilterableTableView::doubleClicked, this, [=](const QModelIndex& index)
- {
- auto selected = loadImageTable->selectionModel()->selectedRows();
- if (selected.size() == 0)
- {
- return;
- }
-
- for (const auto& selection : selected)
- {
- auto name = selection.data().toString().toStdString();
- WorkerPriorityEnqueue([this, name]() { m_cache->LoadImageWithInstallName(name); });
- }
- });
auto loadImageLayout = new QVBoxLayout;
loadImageLayout->addWidget(loadImageFilterEdit);
@@ -318,24 +304,28 @@ KCTriageView::KCTriageView(QWidget* parent, BinaryViewRef data) : QWidget(parent
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:KCView", addr);
+ else
+ m_data->Navigate("Linear:KCView", 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)
- {
- if (button == dialog->button(QMessageBox::Yes))
+ WorkerPriorityEnqueue([this, symbol, navigateToAddress]()
{
- WorkerPriorityEnqueue([this, symbol]()
+ if (m_data->IsValidOffset(symbol.address))
+ navigateToAddress(symbol.address);
+ else
{
m_cache->LoadImageWithInstallName(symbol.image);
- });
- }
- });
- dialog->exec();
+ navigateToAddress(symbol.address);
+ }
+ });
});
m_triageTabs->addTab(symbolWidget, "Symbol Search");