diff options
| author | Ryan Snyder <ryan@vector35.com> | 2025-07-03 01:48:11 -0400 |
|---|---|---|
| committer | Ryan Snyder <ryan@vector35.com> | 2025-07-03 04:30:58 -0400 |
| commit | e96a7a078a9909fc1212861c9669e6af0b034e46 (patch) | |
| tree | 412f072f118f7f784e8500f8bb46dfad0354bc82 /architecture.cpp | |
| parent | 3bfeb0e19d97c71022bb5c50c2a21e129f675e1b (diff) | |
api: indirect branch inlining support
Diffstat (limited to 'architecture.cpp')
| -rw-r--r-- | architecture.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/architecture.cpp b/architecture.cpp index bd476049..6db5b6b5 100644 --- a/architecture.cpp +++ b/architecture.cpp @@ -298,6 +298,15 @@ std::set<ArchAndAddr>& BasicBlockAnalysisContext::GetHaltedDisassemblyAddresses( } +std::map<ArchAndAddr, ArchAndAddr>& BasicBlockAnalysisContext::GetInlinedUnresolvedIndirectBranches() +{ + if (!m_inlinedUnresolvedIndirectBranches) + m_inlinedUnresolvedIndirectBranches.emplace(); + + return *m_inlinedUnresolvedIndirectBranches; +} + + void BasicBlockAnalysisContext::AddTempOutgoingReference(Function* targetFunc) { BNAnalyzeBasicBlocksContextAddTempReference(m_context, targetFunc->m_object); @@ -386,6 +395,29 @@ void BasicBlockAnalysisContext::Finalize() delete[] haltedAddresses; } + if (m_inlinedUnresolvedIndirectBranches) + { + auto& inlinedUnresolvedIndirectBranches = *m_inlinedUnresolvedIndirectBranches; + + BNArchitectureAndAddress* locations = new BNArchitectureAndAddress[inlinedUnresolvedIndirectBranches.size() * 2]; + + size_t i = 0; + for (auto& pair : inlinedUnresolvedIndirectBranches) + { + locations[i].arch = pair.first.arch->GetObject(); + locations[i].address = pair.first.address; + + locations[i + 1].arch = pair.second.arch->GetObject(); + locations[i + 1].address = pair.second.address; + + i += 2; + } + + BNAnalyzeBasicBlocksContextSetInlinedUnresolvedIndirectBranches(m_context, locations, inlinedUnresolvedIndirectBranches.size() * 2); + + delete[] locations; + } + if (m_contextualReturns) { auto& contextualReturns = *m_contextualReturns; |
