From ecf2b3dd3e14d8ed0a3485104eaaa34a372228ba Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Wed, 25 Jun 2025 15:12:23 -0400 Subject: Initial support for guided disassembly. --- function.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'function.cpp') 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& 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& 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& 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 Function::GetGuidedSourceBlocks() +{ + size_t count; + BNArchitectureAndAddress* addresses = BNGetGuidedSourceBlocks(m_object, &count); + + std::vector 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 Function::GetIndirectBranches() { size_t count; -- cgit v1.3.1