Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions api/debuggerapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -830,6 +830,16 @@ namespace BinaryNinjaDebuggerAPI {
bool IsFirstConnectToDebugServer();
bool IsFirstAttach();

bool ShouldShowAdapterSettingsNextLaunch();
bool ShouldShowAdapterSettingsNextAttach();
bool ShouldShowAdapterSettingsNextConnect();
bool ShouldShowAdapterSettingsNextConnectToDebugServer();

void SetShowAdapterSettingsNextLaunch(bool value);
void SetShowAdapterSettingsNextAttach(bool value);
void SetShowAdapterSettingsNextConnect(bool value);
void SetShowAdapterSettingsNextConnectToDebugServer(bool value);

bool IsTTD();

// TTD Memory Analysis Methods
Expand Down
48 changes: 48 additions & 0 deletions api/debuggercontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1094,6 +1094,54 @@ bool DebuggerController::IsFirstAttach()
}


bool DebuggerController::ShouldShowAdapterSettingsNextLaunch()
{
return BNDebuggerShouldShowAdapterSettingsNextLaunch(m_object);
}


bool DebuggerController::ShouldShowAdapterSettingsNextAttach()
{
return BNDebuggerShouldShowAdapterSettingsNextAttach(m_object);
}


bool DebuggerController::ShouldShowAdapterSettingsNextConnect()
{
return BNDebuggerShouldShowAdapterSettingsNextConnect(m_object);
}


bool DebuggerController::ShouldShowAdapterSettingsNextConnectToDebugServer()
{
return BNDebuggerShouldShowAdapterSettingsNextConnectToDebugServer(m_object);
}


void DebuggerController::SetShowAdapterSettingsNextLaunch(bool value)
{
BNDebuggerSetShowAdapterSettingsNextLaunch(m_object, value);
}


void DebuggerController::SetShowAdapterSettingsNextAttach(bool value)
{
BNDebuggerSetShowAdapterSettingsNextAttach(m_object, value);
}


void DebuggerController::SetShowAdapterSettingsNextConnect(bool value)
{
BNDebuggerSetShowAdapterSettingsNextConnect(m_object, value);
}


void DebuggerController::SetShowAdapterSettingsNextConnectToDebugServer(bool value)
{
BNDebuggerSetShowAdapterSettingsNextConnectToDebugServer(m_object, value);
}


bool DebuggerController::IsTTD()
{
return BNDebuggerIsTTD(m_object);
Expand Down
10 changes: 10 additions & 0 deletions api/ffi.h
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,16 @@ extern "C"
DEBUGGER_FFI_API bool BNDebuggerIsFirstConnectToDebugServer(BNDebuggerController* controller);
DEBUGGER_FFI_API bool BNDebuggerIsFirstAttach(BNDebuggerController* controller);

DEBUGGER_FFI_API bool BNDebuggerShouldShowAdapterSettingsNextLaunch(BNDebuggerController* controller);
DEBUGGER_FFI_API bool BNDebuggerShouldShowAdapterSettingsNextAttach(BNDebuggerController* controller);
DEBUGGER_FFI_API bool BNDebuggerShouldShowAdapterSettingsNextConnect(BNDebuggerController* controller);
DEBUGGER_FFI_API bool BNDebuggerShouldShowAdapterSettingsNextConnectToDebugServer(BNDebuggerController* controller);

DEBUGGER_FFI_API void BNDebuggerSetShowAdapterSettingsNextLaunch(BNDebuggerController* controller, bool value);
DEBUGGER_FFI_API void BNDebuggerSetShowAdapterSettingsNextAttach(BNDebuggerController* controller, bool value);
DEBUGGER_FFI_API void BNDebuggerSetShowAdapterSettingsNextConnect(BNDebuggerController* controller, bool value);
DEBUGGER_FFI_API void BNDebuggerSetShowAdapterSettingsNextConnectToDebugServer(BNDebuggerController* controller, bool value);

DEBUGGER_FFI_API bool BNDebuggerIsTTD(BNDebuggerController* controller);

// TTD Memory Analysis Functions
Expand Down
48 changes: 48 additions & 0 deletions core/debuggercontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3083,6 +3083,54 @@ bool DebuggerController::IsFirstAttach()
}


bool DebuggerController::ShouldShowAdapterSettingsNextLaunch()
{
return m_showAdapterSettingsNextLaunch;
}


bool DebuggerController::ShouldShowAdapterSettingsNextAttach()
{
return m_showAdapterSettingsNextAttach;
}


bool DebuggerController::ShouldShowAdapterSettingsNextConnect()
{
return m_showAdapterSettingsNextConnect;
}


bool DebuggerController::ShouldShowAdapterSettingsNextConnectToDebugServer()
{
return m_showAdapterSettingsNextConnectToDebugServer;
}


void DebuggerController::SetShowAdapterSettingsNextLaunch(bool value)
{
m_showAdapterSettingsNextLaunch = value;
}


void DebuggerController::SetShowAdapterSettingsNextAttach(bool value)
{
m_showAdapterSettingsNextAttach = value;
}


void DebuggerController::SetShowAdapterSettingsNextConnect(bool value)
{
m_showAdapterSettingsNextConnect = value;
}


void DebuggerController::SetShowAdapterSettingsNextConnectToDebugServer(bool value)
{
m_showAdapterSettingsNextConnectToDebugServer = value;
}


bool DebuggerController::IsTTD()
{
if(!m_adapter)
Expand Down
16 changes: 16 additions & 0 deletions core/debuggercontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,11 @@ namespace BinaryNinjaDebugger {
bool m_firstConnectToDebugServer = true;
bool m_firstAttach = true;

bool m_showAdapterSettingsNextLaunch = true;
bool m_showAdapterSettingsNextAttach = true;
bool m_showAdapterSettingsNextConnect = true;
bool m_showAdapterSettingsNextConnectToDebugServer = true;

bool m_shouldAnnotateStackVariable = false;

void EventHandler(const DebuggerEvent& event);
Expand Down Expand Up @@ -399,6 +404,17 @@ namespace BinaryNinjaDebugger {
bool IsFirstConnect();
bool IsFirstConnectToDebugServer();
bool IsFirstAttach();

bool ShouldShowAdapterSettingsNextLaunch();
bool ShouldShowAdapterSettingsNextAttach();
bool ShouldShowAdapterSettingsNextConnect();
bool ShouldShowAdapterSettingsNextConnectToDebugServer();

void SetShowAdapterSettingsNextLaunch(bool value);
void SetShowAdapterSettingsNextAttach(bool value);
void SetShowAdapterSettingsNextConnect(bool value);
void SetShowAdapterSettingsNextConnectToDebugServer(bool value);

bool IsTTD();

// TTD Memory Analysis Methods
Expand Down
48 changes: 48 additions & 0 deletions core/ffi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1202,6 +1202,54 @@ bool BNDebuggerIsFirstAttach(BNDebuggerController* controller)
}


bool BNDebuggerShouldShowAdapterSettingsNextLaunch(BNDebuggerController* controller)
{
return controller->object->ShouldShowAdapterSettingsNextLaunch();
}


bool BNDebuggerShouldShowAdapterSettingsNextAttach(BNDebuggerController* controller)
{
return controller->object->ShouldShowAdapterSettingsNextAttach();
}


bool BNDebuggerShouldShowAdapterSettingsNextConnect(BNDebuggerController* controller)
{
return controller->object->ShouldShowAdapterSettingsNextConnect();
}


bool BNDebuggerShouldShowAdapterSettingsNextConnectToDebugServer(BNDebuggerController* controller)
{
return controller->object->ShouldShowAdapterSettingsNextConnectToDebugServer();
}


void BNDebuggerSetShowAdapterSettingsNextLaunch(BNDebuggerController* controller, bool value)
{
controller->object->SetShowAdapterSettingsNextLaunch(value);
}


void BNDebuggerSetShowAdapterSettingsNextAttach(BNDebuggerController* controller, bool value)
{
controller->object->SetShowAdapterSettingsNextAttach(value);
}


void BNDebuggerSetShowAdapterSettingsNextConnect(BNDebuggerController* controller, bool value)
{
controller->object->SetShowAdapterSettingsNextConnect(value);
}


void BNDebuggerSetShowAdapterSettingsNextConnectToDebugServer(BNDebuggerController* controller, bool value)
{
controller->object->SetShowAdapterSettingsNextConnectToDebugServer(value);
}


bool BNDebuggerIsTTD(BNDebuggerController* controller)
{
return controller->object->IsTTD();
Expand Down
18 changes: 17 additions & 1 deletion ui/adaptersettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ using namespace BinaryNinja;
using namespace std;

AdapterSettingsDialog::AdapterSettingsDialog(QWidget* parent, DbgRef<DebuggerController> controller, const std::string& highlightGroup) :
QDialog(), m_controller(controller)
QDialog(), m_controller(controller), m_highlightGroup(highlightGroup)
{
setWindowTitle("Debug Adapter Settings");
setAttribute(Qt::WA_DeleteOnClose);
Expand Down Expand Up @@ -78,12 +78,16 @@ AdapterSettingsDialog::AdapterSettingsDialog(QWidget* parent, DbgRef<DebuggerCon
QHBoxLayout* buttonLayout = new QHBoxLayout;
buttonLayout->setContentsMargins(0, 0, 0, 0);

m_useSameSettingsCheckbox = new QCheckBox("Use same settings next time");
m_useSameSettingsCheckbox->setChecked(true);

QPushButton* cancelButton = new QPushButton("Cancel");
connect(cancelButton, &QPushButton::clicked, [&]() { reject(); });
QPushButton* acceptButton = new QPushButton("Accept");
connect(acceptButton, &QPushButton::clicked, [&]() { apply(); });
acceptButton->setDefault(true);

buttonLayout->addWidget(m_useSameSettingsCheckbox);
buttonLayout->addStretch(1);
buttonLayout->addWidget(cancelButton);
buttonLayout->addSpacing(10);
Expand Down Expand Up @@ -139,5 +143,17 @@ QWidget* AdapterSettingsDialog::getWidgetForAdapter(const QString& adapter)

void AdapterSettingsDialog::apply()
{
if (m_useSameSettingsCheckbox)
{
bool showAgain = !m_useSameSettingsCheckbox->isChecked();
if (m_highlightGroup == "launch")
m_controller->SetShowAdapterSettingsNextLaunch(showAgain);
else if (m_highlightGroup == "attach")
m_controller->SetShowAdapterSettingsNextAttach(showAgain);
else if (m_highlightGroup == "connect")
m_controller->SetShowAdapterSettingsNextConnect(showAgain);
else if (m_highlightGroup == "debug_server")
m_controller->SetShowAdapterSettingsNextConnectToDebugServer(showAgain);
}
accept();
}
2 changes: 2 additions & 0 deletions ui/adaptersettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ class AdapterSettingsDialog : public QDialog
QStackedWidget* m_stack;
QMap<QString, QWidget*> m_viewMap;
QLabel* m_noSettingsLabel;
QCheckBox* m_useSameSettingsCheckbox = nullptr;
std::string m_highlightGroup;

QWidget* getWidgetForAdapter(const QString& adapter);

Expand Down
2 changes: 1 addition & 1 deletion ui/controlswidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ void DebugControlsWidget::performLaunch()
return;

bool firstLaunch = m_controller->IsFirstLaunch();
if (firstLaunch)
if (firstLaunch || m_controller->ShouldShowAdapterSettingsNextLaunch())
{
auto adapterSettings = new AdapterSettingsDialog(this, m_controller, "launch");
if (adapterSettings->exec() != QDialog::Accepted)
Expand Down
8 changes: 4 additions & 4 deletions ui/ui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@ void GlobalDebuggerUI::SetupMenu(UIContext* context)
return;

bool firstLaunch = controller->IsFirstLaunch();
if (firstLaunch)
if (firstLaunch || controller->ShouldShowAdapterSettingsNextLaunch())
{
auto adapterSettings = new AdapterSettingsDialog(context->mainWindow(), controller, "launch");
if (adapterSettings->exec() != QDialog::Accepted)
Expand Down Expand Up @@ -848,7 +848,7 @@ void GlobalDebuggerUI::SetupMenu(UIContext* context)
if (!controller)
return;

if (controller->IsFirstAttach())
if (controller->IsFirstAttach() || controller->ShouldShowAdapterSettingsNextAttach())
{
auto adapterSettings = new AdapterSettingsDialog(context->mainWindow(), controller, "attach");
if (adapterSettings->exec() != QDialog::Accepted)
Expand Down Expand Up @@ -1063,7 +1063,7 @@ void GlobalDebuggerUI::SetupMenu(UIContext* context)
if (!controller)
return;

if (controller->IsFirstConnectToDebugServer())
if (controller->IsFirstConnectToDebugServer() || controller->ShouldShowAdapterSettingsNextConnectToDebugServer())
{
auto adapterSettings = new AdapterSettingsDialog(context->mainWindow(), controller, "debug_server");
if (adapterSettings->exec() != QDialog::Accepted)
Expand Down Expand Up @@ -1118,7 +1118,7 @@ void GlobalDebuggerUI::SetupMenu(UIContext* context)
if (!controller)
return;

if (controller->IsFirstConnect())
if (controller->IsFirstConnect() || controller->ShouldShowAdapterSettingsNextConnect())
{
auto adapterSettings = new AdapterSettingsDialog(context->mainWindow(), controller, "connect");
if (adapterSettings->exec() != QDialog::Accepted)
Expand Down