summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorRusty Wagner <dontpanic@binaryninja.com>2015-03-20 01:21:01 -0400
committerRusty Wagner <dontpanic@binaryninja.com>2015-03-20 01:21:01 -0400
commitdde32cdf497fe54312eca476bc32e147671d3c0d (patch)
treef2eaa9006710c44348d0bf090a4ce14328e8f7ea /binaryview.cpp
parent7726825ec41005363115a69a5c4768d489c5cfec (diff)
Code cross references, undo for creation of functions
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index 2f6e42ef..a965d67c 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -188,6 +188,13 @@ BNModificationStatus BinaryView::GetModificationCallback(void* ctxt, uint64_t of
}
+bool BinaryView::IsValidOffsetCallback(void* ctxt, uint64_t offset)
+{
+ BinaryView* view = (BinaryView*)ctxt;
+ return view->PerformIsValidOffset(offset);
+}
+
+
uint64_t BinaryView::GetStartCallback(void* ctxt)
{
BinaryView* view = (BinaryView*)ctxt;
@@ -224,6 +231,13 @@ bool BinaryView::SaveCallback(void* ctxt, BNFileAccessor* file)
}
+bool BinaryView::PerformIsValidOffset(uint64_t offset)
+{
+ uint8_t val;
+ return PerformRead(&val, offset, 1) == 1;
+}
+
+
bool BinaryView::IsModified() const
{
return BNIsViewModified(m_view);
@@ -425,6 +439,12 @@ void BinaryView::AddEntryPointForAnalysis(Architecture* arch, uint64_t addr)
}
+void BinaryView::RemoveAnalysisFunction(Function* func)
+{
+ BNRemoveAnalysisFunction(m_view, func->GetFunctionObject());
+}
+
+
void BinaryView::UpdateAnalysis()
{
BNUpdateAnalysis(m_view);
@@ -515,6 +535,25 @@ vector<Ref<BasicBlock>> BinaryView::GetBasicBlocksForAddress(uint64_t addr)
}
+vector<ReferenceSource> BinaryView::GetCodeReferences(uint64_t addr)
+{
+ size_t count;
+ BNReferenceSource* refs = BNGetCodeReferences(m_view, addr, &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;
+ }
+
+ BNFreeCodeReferences(refs, count);
+ return result;
+}
+
+
Ref<Symbol> BinaryView::GetSymbolByAddress(uint64_t addr)
{
BNSymbol* sym = BNGetSymbolByAddress(m_view, addr);