summaryrefslogtreecommitdiff
path: root/examples/triage/analysisinfo.cpp
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2026-06-02 09:00:15 -0400
committerBrandon Miller <brandon@vector35.com>2026-06-02 09:00:15 -0400
commit5953d087a9a104e7abb63c5739091214edf2faca (patch)
treeabd95a2698f32b8e1f6ae7feaa9647cff8d218ae /examples/triage/analysisinfo.cpp
parent68215ea14cfbaa4966f830d85d98f7f49b416455 (diff)
Add support for multiple global pointer registers
Diffstat (limited to 'examples/triage/analysisinfo.cpp')
-rw-r--r--examples/triage/analysisinfo.cpp41
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("");
}