diff options
| author | Brian Potchik <brian@vector35.com> | 2025-06-25 15:12:23 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-06-25 15:12:23 -0400 |
| commit | ecf2b3dd3e14d8ed0a3485104eaaa34a372228ba (patch) | |
| tree | 25138e2b24efd3584b42128e38192f01e6fa24b5 /function.cpp | |
| parent | cdb6e62b649ea49b16350e57569df891ef7dfa34 (diff) | |
Initial support for guided disassembly.
Diffstat (limited to 'function.cpp')
| -rw-r--r-- | function.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/function.cpp b/function.cpp index 103fec95..2f04af9a 100644 --- a/function.cpp +++ b/function.cpp @@ -1741,6 +1741,62 @@ void Function::SetUserIndirectBranches( } +void Function::SetGuidedSourceBlocks(const std::vector<ArchAndAddr>& addresses) +{ + BNArchitectureAndAddress* addressList = new BNArchitectureAndAddress[addresses.size()]; + for (size_t i = 0; i < addresses.size(); i++) + { + addressList[i].arch = addresses[i].arch->GetObject(); + addressList[i].address = addresses[i].address; + } + BNSetGuidedSourceBlocks(m_object, addressList, addresses.size()); + delete[] addressList; +} + + +void Function::AddGuidedSourceBlocks(const std::vector<ArchAndAddr>& addresses) +{ + BNArchitectureAndAddress* addressList = new BNArchitectureAndAddress[addresses.size()]; + for (size_t i = 0; i < addresses.size(); i++) + { + addressList[i].arch = addresses[i].arch->GetObject(); + addressList[i].address = addresses[i].address; + } + BNAddGuidedSourceBlocks(m_object, addressList, addresses.size()); + delete[] addressList; +} + + +void Function::RemoveGuidedSourceBlocks(const std::vector<ArchAndAddr>& addresses) +{ + BNArchitectureAndAddress* addressList = new BNArchitectureAndAddress[addresses.size()]; + for (size_t i = 0; i < addresses.size(); i++) + { + addressList[i].arch = addresses[i].arch->GetObject(); + addressList[i].address = addresses[i].address; + } + BNRemoveGuidedSourceBlocks(m_object, addressList, addresses.size()); + delete[] addressList; +} + + +std::vector<ArchAndAddr> Function::GetGuidedSourceBlocks() +{ + size_t count; + BNArchitectureAndAddress* addresses = BNGetGuidedSourceBlocks(m_object, &count); + + std::vector<ArchAndAddr> result; + result.reserve(count); + for (size_t i = 0; i < count; i++) + { + result.push_back({new CoreArchitecture(addresses[i].arch), addresses[i].address}); + } + + delete[] addresses; + return result; +} + + vector<IndirectBranchInfo> Function::GetIndirectBranches() { size_t count; |
