diff options
| author | kat <kat@vector35.com> | 2025-03-19 20:03:34 -0400 |
|---|---|---|
| committer | kat <kat@vector35.com> | 2025-03-19 20:06:23 -0400 |
| commit | 7d66d87a4600c8954c585c3c690546fc56903d44 (patch) | |
| tree | e6eade9f6b277a3dde4e3e8b15969dd6f9c40226 /view/kernelcache/ui | |
| parent | 9169a13c818fc7f3b09246360c31e200b01bda23 (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.cpp | 42 |
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"); |
