Skip to content

Commit 6d11f80

Browse files
committed
Hiding base detection results widgets before run
1 parent 465a8d5 commit 6d11f80

File tree

4 files changed

+51
-17
lines changed

4 files changed

+51
-17
lines changed

basedetection.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,6 @@ std::vector<BNBaseAddressDetectionReason> BaseAddressDetection::GetReasonsForBas
8787
for (size_t i = 0; i < count; i++)
8888
result.push_back(reasons[i]);
8989

90-
free(reasons);
90+
BNFreeBaseAddressDetectionReasons(reasons);
9191
return result;
9292
}

binaryninjacore.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7044,6 +7044,7 @@ extern "C"
70447044
BNBaseAddressDetectionConfidence* confidence, uint64_t* lastTestedBaseAddress);
70457045
BINARYNINJACOREAPI BNBaseAddressDetectionReason* BNGetBaseAddressDetectionReasons(BNBaseAddressDetection* bad,
70467046
uint64_t baseAddress, size_t* count);
7047+
BINARYNINJACOREAPI void BNFreeBaseAddressDetectionReasons(BNBaseAddressDetectionReason* reasons);
70477048
BINARYNINJACOREAPI void BNAbortBaseAddressDetection(BNBaseAddressDetection* bad);
70487049
BINARYNINJACOREAPI bool BNIsBaseAddressDetectionAborted(BNBaseAddressDetection* bad);
70497050
BINARYNINJACOREAPI void BNFreeBaseAddressDetection(BNBaseAddressDetection* bad);

examples/triage/baseaddress.cpp

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,32 @@ void BaseAddressDetectionThread::run()
135135
emit ResultReady(results);
136136
}
137137

138+
139+
void BaseAddressDetectionWidget::HideResultsWidgets(bool hide)
140+
{
141+
if (hide)
142+
{
143+
m_preferredBaseLabel->setHidden(true);
144+
m_preferredBase->setHidden(true);
145+
m_confidenceLabel->setHidden(true);
146+
m_confidence->setHidden(true);
147+
m_resultsTableWidget->setHidden(true);
148+
m_reloadBase->setHidden(true);
149+
m_rebaseButton->setHidden(true);
150+
}
151+
else
152+
{
153+
m_preferredBaseLabel->setHidden(false);
154+
m_preferredBase->setHidden(false);
155+
m_confidenceLabel->setHidden(false);
156+
m_confidence->setHidden(false);
157+
m_resultsTableWidget->setHidden(false);
158+
m_reloadBase->setHidden(false);
159+
m_rebaseButton->setHidden(false);
160+
}
161+
}
162+
163+
138164
void BaseAddressDetectionWidget::HandleResults(const BaseAddressDetectionQtResults& results)
139165
{
140166
if (!results.Status.empty())
@@ -152,7 +178,7 @@ void BaseAddressDetectionWidget::HandleResults(const BaseAddressDetectionQtResul
152178
}
153179
else
154180
{
155-
m_rebaseButton->setEnabled(true);
181+
HideResultsWidgets(false);
156182
if (results.Status.empty() && !m_worker->IsAborted())
157183
m_status->setText("Completed with results");
158184
m_preferredBase->setText("0x" + QString::number(results.Scores.rbegin()->second, 16));
@@ -182,18 +208,20 @@ void BaseAddressDetectionWidget::HandleResults(const BaseAddressDetectionQtResul
182208
}
183209
}
184210

185-
m_detectBaseAddressButton->setEnabled(true);
186211
m_abortButton->setHidden(true);
212+
m_startButton->setHidden(false);
213+
m_startButton->setEnabled(true);
187214
}
188215

189216

190217
void BaseAddressDetectionWidget::DetectBaseAddress()
191218
{
219+
HideResultsWidgets(true);
192220
m_status->setText("Running...");
193221
m_resultsTableWidget->clearContents();
194222
m_preferredBase->setText("Not available");
195223
m_confidence->setText("Not available");
196-
m_detectBaseAddressButton->setEnabled(false);
224+
m_startButton->setHidden(true);
197225
m_worker = new BaseAddressDetectionThread(&m_inputs, m_view);
198226
connect(m_worker, &BaseAddressDetectionThread::ResultReady, this, &BaseAddressDetectionWidget::HandleResults);
199227
connect(m_worker, &BaseAddressDetectionThread::finished, m_worker, &QObject::deleteLater);
@@ -206,6 +234,8 @@ void BaseAddressDetectionWidget::Abort()
206234
{
207235
m_worker->Abort();
208236
m_abortButton->setHidden(true);
237+
m_startButton->setHidden(false);
238+
m_startButton->setEnabled(false);
209239
}
210240

211241

@@ -298,31 +328,32 @@ BaseAddressDetectionWidget::BaseAddressDetectionWidget(QWidget* parent, BinaryNi
298328
m_inputs.MaxPointersPerCluster = new QLineEdit("128");
299329
m_layout->addWidget(m_inputs.MaxPointersPerCluster, row++, column + 3, Qt::AlignLeft);
300330

301-
m_detectBaseAddressButton = new QPushButton("Start");
302-
connect(m_detectBaseAddressButton, &QPushButton::clicked, this, &BaseAddressDetectionWidget::DetectBaseAddress);
303-
m_layout->addWidget(m_detectBaseAddressButton, row, column, Qt::AlignLeft);
331+
m_startButton = new QPushButton("Start");
332+
connect(m_startButton, &QPushButton::clicked, this, &BaseAddressDetectionWidget::DetectBaseAddress);
333+
m_layout->addWidget(m_startButton, row, column, Qt::AlignLeft);
304334

305335
m_abortButton = new QPushButton("Abort");
306336
connect(m_abortButton, &QPushButton::clicked, this, &BaseAddressDetectionWidget::Abort);
307337
m_abortButton->setHidden(true);
308-
m_layout->addWidget(m_abortButton, row++, column + 1, Qt::AlignLeft);
338+
m_layout->addWidget(m_abortButton, row, column, Qt::AlignLeft);
309339

310-
m_layout->addWidget(new QLabel("Status:"), row, column, Qt::AlignLeft);
311340
m_status = new QLabel("Not running");
312341
auto palette = m_status->palette();
313342
palette.setColor(QPalette::WindowText, getThemeColor(AlphanumericHighlightColor));
314343
m_status->setPalette(palette);
315344
m_status->setFont(getMonospaceFont(this));
316-
m_layout->addWidget(m_status, row++, column + 1, 1, 2, Qt::AlignLeft);
345+
m_layout->addWidget(m_status, row++, column + 1, 1, 2, Qt::AlignLeft);
317346

318-
m_layout->addWidget(new QLabel("Preferred Base:"), row, column, Qt::AlignLeft);
347+
m_preferredBaseLabel = new QLabel("Preferred Base:");
348+
m_layout->addWidget(m_preferredBaseLabel, row, column, Qt::AlignLeft);
319349
m_preferredBase = new QLabel("Not available");
320350
m_preferredBase->setTextInteractionFlags(Qt::TextSelectableByMouse);
321351
m_preferredBase->setFont(getMonospaceFont(this));
322352
m_preferredBase->setPalette(palette);
323353
m_layout->addWidget(m_preferredBase, row, column + 1, Qt::AlignLeft);
324354

325-
m_layout->addWidget(new QLabel("Confidence:"), row, column + 2, Qt::AlignLeft);
355+
m_confidenceLabel = new QLabel("Confidence:");
356+
m_layout->addWidget(m_confidenceLabel, row, column + 2, Qt::AlignLeft);
326357
m_confidence = new QLabel("Not available");
327358
m_confidence->setFont(getMonospaceFont(this));
328359
m_confidence->setPalette(palette);
@@ -342,15 +373,14 @@ BaseAddressDetectionWidget::BaseAddressDetectionWidget(QWidget* parent, BinaryNi
342373
m_resultsTableWidget->setMinimumHeight(150);
343374
m_layout->addWidget(m_resultsTableWidget, row++, column, 1, 4);
344375

345-
m_layout->addWidget(new QLabel("Rebase At:"), row, column, Qt::AlignLeft);
346376
m_reloadBase = new QLineEdit("0x0");
347-
m_layout->addWidget(m_reloadBase, row++, column + 1, Qt::AlignLeft);
377+
m_layout->addWidget(m_reloadBase, row, column, Qt::AlignLeft);
348378

349379
m_rebaseButton = new QPushButton("Start Full Analysis");
350-
m_rebaseButton->setEnabled(false);
351380
connect(m_rebaseButton, &QPushButton::clicked, this, &BaseAddressDetectionWidget::RebaseWithFullAnalysis);
352-
m_layout->addWidget(m_rebaseButton, row, column, Qt::AlignLeft);
381+
m_layout->addWidget(m_rebaseButton, row, column + 1, Qt::AlignLeft);
353382

383+
HideResultsWidgets(true);
354384
m_layout->setColumnStretch(3, 1);
355385
setLayout(m_layout);
356386
}

examples/triage/baseaddress.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,13 @@ class BaseAddressDetectionWidget : public QWidget
6262
BinaryNinja::Ref<BinaryNinja::BinaryView> m_view;
6363
QGridLayout* m_layout {};
6464

65-
QPushButton* m_detectBaseAddressButton = nullptr;
65+
QPushButton* m_startButton = nullptr;
6666
QPushButton* m_abortButton = nullptr;
6767

6868
BaseAddressDetectionQtInputs m_inputs;
69+
QLabel* m_preferredBaseLabel;
6970
QLabel* m_preferredBase;
71+
QLabel* m_confidenceLabel;
7072
QLabel* m_confidence;
7173
QLabel* m_status;
7274
QLineEdit* m_reloadBase;
@@ -77,6 +79,7 @@ class BaseAddressDetectionWidget : public QWidget
7779
void RebaseWithFullAnalysis();
7880
void Abort();
7981
void HandleResults(const BaseAddressDetectionQtResults& results);
82+
void HideResultsWidgets(bool hide);
8083

8184
public:
8285
BaseAddressDetectionWidget(QWidget* parent, BinaryNinja::Ref<BinaryNinja::BinaryView> bv);

0 commit comments

Comments
 (0)