summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <dontpanic@binaryninja.com>2015-03-19 22:57:29 -0400
committerRusty Wagner <dontpanic@binaryninja.com>2015-03-19 22:57:29 -0400
commit7726825ec41005363115a69a5c4768d489c5cfec (patch)
treeb3e44b700b4af853f6b34b05a61158d1d5b16965
parent97cbee81fcda2a812cc655cc6b8cf1e2bead67b9 (diff)
Update function list when analysis finds new functions
-rw-r--r--binaryninjaapi.h11
-rw-r--r--binaryview.cpp20
2 files changed, 28 insertions, 3 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index ed2d2cec..d7c2c091 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -254,6 +254,7 @@ namespace BinaryNinja
};
class BinaryView;
+ class Function;
class BinaryDataNotification
{
@@ -263,6 +264,8 @@ namespace BinaryNinja
static void DataWrittenCallback(void* ctxt, BNBinaryView* data, uint64_t offset, size_t len);
static void DataInsertedCallback(void* ctxt, BNBinaryView* data, uint64_t offset, size_t len);
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);
public:
BinaryDataNotification();
@@ -270,9 +273,11 @@ namespace BinaryNinja
BNBinaryDataNotification* GetCallbacks() { return &m_callbacks; }
- virtual void OnBinaryDataWritten(BinaryView* view, uint64_t offset, size_t len) = 0;
- virtual void OnBinaryDataInserted(BinaryView* view, uint64_t offset, size_t len) = 0;
- virtual void OnBinaryDataRemoved(BinaryView* view, uint64_t offset, uint64_t len) = 0;
+ virtual void OnBinaryDataWritten(BinaryView* view, uint64_t offset, size_t len) { (void)view; (void)offset; (void)len; }
+ virtual void OnBinaryDataInserted(BinaryView* view, uint64_t offset, size_t len) { (void)view; (void)offset; (void)len; }
+ 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; }
};
class FileAccessor
diff --git a/binaryview.cpp b/binaryview.cpp
index e99038f4..2f6e42ef 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -28,12 +28,32 @@ void BinaryDataNotification::DataRemovedCallback(void* ctxt, BNBinaryView* objec
}
+void BinaryDataNotification::FunctionAddedCallback(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->OnAnalysisFunctionAdded(view, funcObj);
+}
+
+
+void BinaryDataNotification::FunctionRemovedCallback(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->OnAnalysisFunctionRemoved(view, funcObj);
+}
+
+
BinaryDataNotification::BinaryDataNotification()
{
m_callbacks.context = this;
m_callbacks.dataWritten = DataWrittenCallback;
m_callbacks.dataInserted = DataInsertedCallback;
m_callbacks.dataRemoved = DataRemovedCallback;
+ m_callbacks.functionAdded = FunctionAddedCallback;
+ m_callbacks.functionRemoved = FunctionRemovedCallback;
}