From 59f9b193ac9da6c861965be153eb8c788388089a Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 18 Aug 2015 23:57:49 -0400 Subject: Computed address and string annotations --- binaryninjaapi.h | 9 +++++++++ binaryview.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index de03b078..be801a3c 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -434,6 +434,9 @@ namespace BinaryNinja virtual BNModificationStatus PerformGetModification(uint64_t offset) { (void)offset; return Original; } virtual bool PerformIsValidOffset(uint64_t offset); + virtual bool PerformIsOffsetReadable(uint64_t offset); + virtual bool PerformIsOffsetWritable(uint64_t offset); + virtual bool PerformIsOffsetExecutable(uint64_t offset); virtual uint64_t PerformGetStart() const { return 0; } virtual uint64_t PerformGetLength() const { return 0; } virtual uint64_t PerformGetEntryPoint() const { return 0; } @@ -455,6 +458,9 @@ namespace BinaryNinja static size_t RemoveCallback(void* ctxt, uint64_t offset, uint64_t len); static BNModificationStatus GetModificationCallback(void* ctxt, uint64_t offset); static bool IsValidOffsetCallback(void* ctxt, uint64_t offset); + static bool IsOffsetReadableCallback(void* ctxt, uint64_t offset); + static bool IsOffsetWritableCallback(void* ctxt, uint64_t offset); + static bool IsOffsetExecutableCallback(void* ctxt, uint64_t offset); static uint64_t GetStartCallback(void* ctxt); static uint64_t GetLengthCallback(void* ctxt); static uint64_t GetEntryPointCallback(void* ctxt); @@ -504,6 +510,9 @@ namespace BinaryNinja std::vector GetModification(uint64_t offset, size_t len); bool IsValidOffset(uint64_t offset) const; + bool IsOffsetReadable(uint64_t offset) const; + bool IsOffsetWritable(uint64_t offset) const; + bool IsOffsetExecutable(uint64_t offset) const; uint64_t GetStart() const; uint64_t GetEnd() const; diff --git a/binaryview.cpp b/binaryview.cpp index b0549f93..2a7677c9 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -232,6 +232,27 @@ bool BinaryView::IsValidOffsetCallback(void* ctxt, uint64_t offset) } +bool BinaryView::IsOffsetReadableCallback(void* ctxt, uint64_t offset) +{ + BinaryView* view = (BinaryView*)ctxt; + return view->PerformIsOffsetReadable(offset); +} + + +bool BinaryView::IsOffsetWritableCallback(void* ctxt, uint64_t offset) +{ + BinaryView* view = (BinaryView*)ctxt; + return view->PerformIsOffsetWritable(offset); +} + + +bool BinaryView::IsOffsetExecutableCallback(void* ctxt, uint64_t offset) +{ + BinaryView* view = (BinaryView*)ctxt; + return view->PerformIsOffsetExecutable(offset); +} + + uint64_t BinaryView::GetStartCallback(void* ctxt) { BinaryView* view = (BinaryView*)ctxt; @@ -289,6 +310,24 @@ bool BinaryView::PerformIsValidOffset(uint64_t offset) } +bool BinaryView::PerformIsOffsetReadable(uint64_t offset) +{ + return PerformIsValidOffset(offset); +} + + +bool BinaryView::PerformIsOffsetWritable(uint64_t offset) +{ + return PerformIsValidOffset(offset); +} + + +bool BinaryView::PerformIsOffsetExecutable(uint64_t offset) +{ + return PerformIsValidOffset(offset); +} + + BNEndianness BinaryView::PerformGetDefaultEndianness() const { Ref arch = GetDefaultArchitecture(); @@ -498,6 +537,24 @@ bool BinaryView::IsValidOffset(uint64_t offset) const } +bool BinaryView::IsOffsetReadable(uint64_t offset) const +{ + return BNIsOffsetReadable(m_view, offset); +} + + +bool BinaryView::IsOffsetWritable(uint64_t offset) const +{ + return BNIsOffsetWritable(m_view, offset); +} + + +bool BinaryView::IsOffsetExecutable(uint64_t offset) const +{ + return BNIsOffsetExecutable(m_view, offset); +} + + uint64_t BinaryView::GetStart() const { return BNGetStartOffset(m_view); -- cgit v1.3.1