diff options
| author | Rusty Wagner <dontpanic@binaryninja.com> | 2015-03-20 01:21:01 -0400 |
|---|---|---|
| committer | Rusty Wagner <dontpanic@binaryninja.com> | 2015-03-20 01:21:01 -0400 |
| commit | dde32cdf497fe54312eca476bc32e147671d3c0d (patch) | |
| tree | f2eaa9006710c44348d0bf090a4ce14328e8f7ea /binaryview.cpp | |
| parent | 7726825ec41005363115a69a5c4768d489c5cfec (diff) | |
Code cross references, undo for creation of functions
Diffstat (limited to 'binaryview.cpp')
| -rw-r--r-- | binaryview.cpp | 39 |
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); |
