summaryrefslogtreecommitdiff
path: root/function.cpp
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-06-25 15:12:23 -0400
committerBrian Potchik <brian@vector35.com>2025-06-25 15:12:23 -0400
commitecf2b3dd3e14d8ed0a3485104eaaa34a372228ba (patch)
tree25138e2b24efd3584b42128e38192f01e6fa24b5 /function.cpp
parentcdb6e62b649ea49b16350e57569df891ef7dfa34 (diff)
Initial support for guided disassembly.
Diffstat (limited to 'function.cpp')
-rw-r--r--function.cpp56
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;