diff options
| author | Brandon Miller <brandon@vector35.com> | 2026-06-02 09:00:15 -0400 |
|---|---|---|
| committer | Brandon Miller <brandon@vector35.com> | 2026-06-02 09:00:15 -0400 |
| commit | 5953d087a9a104e7abb63c5739091214edf2faca (patch) | |
| tree | abd95a2698f32b8e1f6ae7feaa9647cff8d218ae /examples/triage/analysisinfo.cpp | |
| parent | 68215ea14cfbaa4966f830d85d98f7f49b416455 (diff) | |
Add support for multiple global pointer registers
Diffstat (limited to 'examples/triage/analysisinfo.cpp')
| -rw-r--r-- | examples/triage/analysisinfo.cpp | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/examples/triage/analysisinfo.cpp b/examples/triage/analysisinfo.cpp index cd18e242..7e04a0b7 100644 --- a/examples/triage/analysisinfo.cpp +++ b/examples/triage/analysisinfo.cpp @@ -44,11 +44,11 @@ AnalysisInfoWidget::~AnalysisInfoWidget() void AnalysisInfoWidget::timerExpired() { - auto gpValue = m_data->GetGlobalPointerValue(); - if (gpValue == m_lastGPValue) + auto gpValues = m_data->GetGlobalPointerValues(); + if (gpValues == m_lastGPValues) return; - m_lastGPValue = gpValue; + m_lastGPValues = gpValues; updateDisplay(); } @@ -61,14 +61,36 @@ void AnalysisInfoWidget::updateDisplay() auto callingConvention = defaultPlatform->GetDefaultCallingConvention(); if (callingConvention) { - auto gpRegister = callingConvention->GetGlobalPointerRegister(); - if (gpRegister != BN_INVALID_REGISTER) + auto gpValues = m_data->GetGlobalPointerValues(); + if (!gpValues.empty()) { - auto gpValue = m_data->GetGlobalPointerValue(); - std::string gpString = getStringForRegisterValue(m_data->GetDefaultArchitecture(), gpValue); - std::string gpExtraString = std::string(" @ ") + m_data->GetDefaultArchitecture()->GetRegisterName(gpRegister); + std::vector<std::string> gpStrings; + auto arch = m_data->GetDefaultArchitecture(); + for (auto& [reg, value] : gpValues) + { + if (reg == BN_INVALID_REGISTER) + continue; + gpStrings.push_back(arch->GetRegisterName(reg) + "=" + getStringForRegisterValue(arch, value)); + } + + if (gpStrings.empty()) + { + m_gpLabel->setText("N/A"); + m_gpExtraLabel->setText(""); + return; + } + + std::string gpString; + for (size_t i = 0; i < gpStrings.size(); i++) + { + if (i != 0) + gpString += ", "; + gpString += gpStrings[i]; + } + + std::string gpExtraString; if (m_data->UserGlobalPointerValueSet()) - gpExtraString += " (*)"; + gpExtraString = " (*)"; m_gpLabel->setText(QString::fromStdString(gpString)); m_gpExtraLabel->setText(QString::fromStdString(gpExtraString)); @@ -78,4 +100,5 @@ void AnalysisInfoWidget::updateDisplay() } m_gpLabel->setText("N/A"); + m_gpExtraLabel->setText(""); } |
