summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <dontpanic@binaryninja.com>2015-03-21 20:46:38 -0400
committerRusty Wagner <dontpanic@binaryninja.com>2015-03-21 20:46:38 -0400
commita8eb816d382a138c8ea4b535dcf104590424095f (patch)
tree5d3ff3a260cb2ca931acc57ee6a25993b3e6a36d
parentc85cae0d74c2c32b23f5e1422f230bebd61f1b1e (diff)
Auto update graph when file contents change
-rw-r--r--binaryninjaapi.h32
-rw-r--r--binaryview.cpp28
2 files changed, 47 insertions, 13 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 5a50f5e4..215532f6 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -287,6 +287,7 @@ namespace BinaryNinja
static void DataRemovedCallback(void* ctxt, BNBinaryView* data, uint64_t offset, uint64_t len);
static void FunctionAddedCallback(void* ctxt, BNBinaryView* data, BNFunction* func);
static void FunctionRemovedCallback(void* ctxt, BNBinaryView* data, BNFunction* func);
+ static void FunctionUpdatedCallback(void* ctxt, BNBinaryView* data, BNFunction* func);
public:
BinaryDataNotification();
@@ -299,6 +300,7 @@ namespace BinaryNinja
virtual void OnBinaryDataRemoved(BinaryView* view, uint64_t offset, uint64_t len) { (void)view; (void)offset; (void)len; }
virtual void OnAnalysisFunctionAdded(BinaryView* view, Function* func) { (void)view; (void)func; }
virtual void OnAnalysisFunctionRemoved(BinaryView* view, Function* func) { (void)view; (void)func; }
+ virtual void OnAnalysisFunctionUpdated(BinaryView* view, Function* func) { (void)view; (void)func; }
};
class FileAccessor
@@ -374,19 +376,6 @@ namespace BinaryNinja
BinaryView(FileMetadata* file);
- private:
- static size_t ReadCallback(void* ctxt, void* dest, uint64_t offset, size_t len);
- static size_t WriteCallback(void* ctxt, uint64_t offset, const void* src, size_t len);
- static size_t InsertCallback(void* ctxt, uint64_t offset, const void* src, size_t len);
- 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 uint64_t GetStartCallback(void* ctxt);
- static uint64_t GetLengthCallback(void* ctxt);
- static uint64_t GetEntryPointCallback(void* ctxt);
- static bool IsExecutableCallback(void* ctxt);
- static bool SaveCallback(void* ctxt, BNFileAccessor* file);
-
virtual size_t PerformRead(void* dest, uint64_t offset, size_t len) { (void)dest; (void)offset; (void)len; return 0; }
virtual size_t PerformWrite(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; }
virtual size_t PerformInsert(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; }
@@ -401,6 +390,23 @@ namespace BinaryNinja
virtual bool PerformSave(FileAccessor* file) { (void)file; return false; }
+ void NotifyDataWritten(uint64_t offset, size_t len);
+ void NotifyDataInserted(uint64_t offset, size_t len);
+ void NotifyDataRemoved(uint64_t offset, uint64_t len);
+
+ private:
+ static size_t ReadCallback(void* ctxt, void* dest, uint64_t offset, size_t len);
+ static size_t WriteCallback(void* ctxt, uint64_t offset, const void* src, size_t len);
+ static size_t InsertCallback(void* ctxt, uint64_t offset, const void* src, size_t len);
+ 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 uint64_t GetStartCallback(void* ctxt);
+ static uint64_t GetLengthCallback(void* ctxt);
+ static uint64_t GetEntryPointCallback(void* ctxt);
+ static bool IsExecutableCallback(void* ctxt);
+ static bool SaveCallback(void* ctxt, BNFileAccessor* file);
+
public:
BinaryView(BNBinaryView* view);
virtual ~BinaryView();
diff --git a/binaryview.cpp b/binaryview.cpp
index a965d67c..8d75e7a7 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -46,6 +46,15 @@ void BinaryDataNotification::FunctionRemovedCallback(void* ctxt, BNBinaryView* o
}
+void BinaryDataNotification::FunctionUpdatedCallback(void* ctxt, BNBinaryView* object, BNFunction* func)
+{
+ BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
+ Ref<BinaryView> view = new BinaryView(BNNewViewReference(object));
+ Ref<Function> funcObj = new Function(BNNewFunctionReference(func));
+ notify->OnAnalysisFunctionUpdated(view, funcObj);
+}
+
+
BinaryDataNotification::BinaryDataNotification()
{
m_callbacks.context = this;
@@ -54,6 +63,7 @@ BinaryDataNotification::BinaryDataNotification()
m_callbacks.dataRemoved = DataRemovedCallback;
m_callbacks.functionAdded = FunctionAddedCallback;
m_callbacks.functionRemoved = FunctionRemovedCallback;
+ m_callbacks.functionUpdated = FunctionUpdatedCallback;
}
@@ -238,6 +248,24 @@ bool BinaryView::PerformIsValidOffset(uint64_t offset)
}
+void BinaryView::NotifyDataWritten(uint64_t offset, size_t len)
+{
+ BNNotifyDataWritten(m_view, offset, len);
+}
+
+
+void BinaryView::NotifyDataInserted(uint64_t offset, size_t len)
+{
+ BNNotifyDataInserted(m_view, offset, len);
+}
+
+
+void BinaryView::NotifyDataRemoved(uint64_t offset, uint64_t len)
+{
+ BNNotifyDataRemoved(m_view, offset, len);
+}
+
+
bool BinaryView::IsModified() const
{
return BNIsViewModified(m_view);