summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2019-07-19 14:42:35 -0400
committerPeter LaFosse <peter@vector35.com>2019-07-19 14:42:35 -0400
commit71a11edd4f4bf05b35d9d845bf313f109f3db0be (patch)
treeb485e920d9b9151a3d9923dd9e455a2e3a4906ce
parent8cf1942611f7d3e517412e2062da2a69f514cd9f (diff)
Add BinaryDataNotifications for Symbols
-rw-r--r--binaryninjaapi.h7
-rw-r--r--binaryninjacore.h3
-rw-r--r--binaryview.cpp30
3 files changed, 40 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 76595ca7..23020d5e 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -878,6 +878,7 @@ namespace BinaryNinja
class Function;
struct DataVariable;
+ class Symbol;
class BinaryDataNotification
{
@@ -894,6 +895,9 @@ namespace BinaryNinja
static void DataVariableAddedCallback(void* ctxt, BNBinaryView* data, BNDataVariable* var);
static void DataVariableRemovedCallback(void* ctxt, BNBinaryView* data, BNDataVariable* var);
static void DataVariableUpdatedCallback(void* ctxt, BNBinaryView* data, BNDataVariable* var);
+ static void SymbolAddedCallback(void* ctxt, BNBinaryView* view, BNSymbol* sym);
+ static void SymbolUpdatedCallback(void* ctxt, BNBinaryView* view, BNSymbol* sym);
+ static void SymbolRemovedCallback(void* ctxt, BNBinaryView* view, BNSymbol* sym);
static void DataMetadataUpdatedCallback(void* ctxt, BNBinaryView* object, uint64_t offset);
static void StringFoundCallback(void* ctxt, BNBinaryView* data, BNStringType type, uint64_t offset, size_t len);
static void StringRemovedCallback(void* ctxt, BNBinaryView* data, BNStringType type, uint64_t offset, size_t len);
@@ -917,6 +921,9 @@ namespace BinaryNinja
virtual void OnDataVariableRemoved(BinaryView* view, const DataVariable& var) { (void)view; (void)var; }
virtual void OnDataVariableUpdated(BinaryView* view, const DataVariable& var) { (void)view; (void)var; }
virtual void OnDataMetadataUpdated(BinaryView* view, uint64_t offset) { (void)view; (void)offset; }
+ virtual void OnSymbolAdded(BinaryView* view, Symbol* sym) { (void)view; (void)sym; }
+ virtual void OnSymbolUpdated(BinaryView* view, Symbol* sym) { (void)view; (void)sym; }
+ virtual void OnSymbolRemoved(BinaryView* view, Symbol* sym) { (void)view; (void)sym; }
virtual void OnStringFound(BinaryView* data, BNStringType type, uint64_t offset, size_t len) { (void)data; (void)type; (void)offset; (void)len; }
virtual void OnStringRemoved(BinaryView* data, BNStringType type, uint64_t offset, size_t len) { (void)data; (void)type; (void)offset; (void)len; }
virtual void OnTypeDefined(BinaryView* data, const QualifiedName& name, Type* type) { (void)data; (void)name; (void)type; }
diff --git a/binaryninjacore.h b/binaryninjacore.h
index c6244cba..d460166c 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1074,6 +1074,9 @@ extern "C"
void (*dataVariableRemoved)(void* ctxt, BNBinaryView* view, BNDataVariable* var);
void (*dataVariableUpdated)(void* ctxt, BNBinaryView* view, BNDataVariable* var);
void (*dataMetadataUpdated)(void* ctxt, BNBinaryView* view, uint64_t offset);
+ void (*symbolAdded)(void* ctxt, BNBinaryView* view, BNSymbol* sym);
+ void (*symbolUpdated)(void* ctxt, BNBinaryView* view, BNSymbol* sym);
+ void (*symbolRemoved)(void* ctxt, BNBinaryView* view, BNSymbol* sym);
void (*stringFound)(void* ctxt, BNBinaryView* view, BNStringType type, uint64_t offset, size_t len);
void (*stringRemoved)(void* ctxt, BNBinaryView* view, BNStringType type, uint64_t offset, size_t len);
void (*typeDefined)(void* ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type);
diff --git a/binaryview.cpp b/binaryview.cpp
index 97f4a542..7806c656 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -122,6 +122,33 @@ void BinaryDataNotification::DataMetadataUpdatedCallback(void* ctxt, BNBinaryVie
}
+void BinaryDataNotification::SymbolAddedCallback(void* ctxt, BNBinaryView* object, BNSymbol* symobj)
+{
+ BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
+ Ref<BinaryView> view = new BinaryView(BNNewViewReference(object));
+ Ref<Symbol> sym = new Symbol(BNNewSymbolReference(symobj));
+ notify->OnSymbolAdded(view, sym);
+}
+
+
+void BinaryDataNotification::SymbolUpdatedCallback(void* ctxt, BNBinaryView* object, BNSymbol* symobj)
+{
+ BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
+ Ref<BinaryView> view = new BinaryView(BNNewViewReference(object));
+ Ref<Symbol> sym = new Symbol(BNNewSymbolReference(symobj));
+ notify->OnSymbolUpdated(view, sym);
+}
+
+
+void BinaryDataNotification::SymbolRemovedCallback(void* ctxt, BNBinaryView* object, BNSymbol* symobj)
+{
+ BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
+ Ref<BinaryView> view = new BinaryView(BNNewViewReference(object));
+ Ref<Symbol> sym = new Symbol(BNNewSymbolReference(symobj));
+ notify->OnSymbolRemoved(view, sym);
+}
+
+
void BinaryDataNotification::StringFoundCallback(void* ctxt, BNBinaryView* object, BNStringType type, uint64_t offset, size_t len)
{
BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
@@ -170,6 +197,9 @@ BinaryDataNotification::BinaryDataNotification()
m_callbacks.dataVariableRemoved = DataVariableRemovedCallback;
m_callbacks.dataVariableUpdated = DataVariableUpdatedCallback;
m_callbacks.dataMetadataUpdated = DataMetadataUpdatedCallback;
+ m_callbacks.symbolAdded = SymbolAddedCallback;
+ m_callbacks.symbolUpdated = SymbolUpdatedCallback;
+ m_callbacks.symbolRemoved = SymbolRemovedCallback;
m_callbacks.stringFound = StringFoundCallback;
m_callbacks.stringRemoved = StringRemovedCallback;
m_callbacks.typeDefined = TypeDefinedCallback;