summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-12-29 16:11:53 -0500
committerRusty Wagner <rusty@vector35.com>2015-12-29 16:11:53 -0500
commit88c7de7a9d390d2e99d14d1ce6837729a69e900d (patch)
tree0b54a2508723ae416a1b9011bad346590b36c8b0
parent73d4094f1d3f666c30f7533231261eb375cef6e8 (diff)
Show cross references for entire range when selecting multiple bytes
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryview.cpp20
2 files changed, 21 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index c7bb0dd7..6ebdf22d 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -588,6 +588,7 @@ namespace BinaryNinja
std::vector<Ref<BasicBlock>> GetBasicBlocksForAddress(uint64_t addr);
std::vector<ReferenceSource> GetCodeReferences(uint64_t addr);
+ std::vector<ReferenceSource> GetCodeReferences(uint64_t addr, uint64_t len);
Ref<Symbol> GetSymbolByAddress(uint64_t addr);
Ref<Symbol> GetSymbolByRawName(const std::string& name);
diff --git a/binaryview.cpp b/binaryview.cpp
index f2090185..721adcba 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -803,6 +803,26 @@ vector<ReferenceSource> BinaryView::GetCodeReferences(uint64_t addr)
}
+vector<ReferenceSource> BinaryView::GetCodeReferences(uint64_t addr, uint64_t len)
+{
+ size_t count;
+ BNReferenceSource* refs = BNGetCodeReferencesInRange(m_view, addr, len, &count);
+
+ vector<ReferenceSource> result;
+ for (size_t i = 0; i < count; i++)
+ {
+ ReferenceSource src;
+ src.func = new Function(BNNewFunctionReference(refs[i].func));
+ src.arch = new CoreArchitecture(refs[i].arch);
+ src.addr = refs[i].addr;
+ result.push_back(src);
+ }
+
+ BNFreeCodeReferences(refs, count);
+ return result;
+}
+
+
Ref<Symbol> BinaryView::GetSymbolByAddress(uint64_t addr)
{
BNSymbol* sym = BNGetSymbolByAddress(m_view, addr);