diff options
| author | Peter LaFosse <peter@vector35.com> | 2019-07-19 14:42:35 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2019-07-19 14:42:35 -0400 |
| commit | 71a11edd4f4bf05b35d9d845bf313f109f3db0be (patch) | |
| tree | b485e920d9b9151a3d9923dd9e455a2e3a4906ce | |
| parent | 8cf1942611f7d3e517412e2062da2a69f514cd9f (diff) | |
Add BinaryDataNotifications for Symbols
| -rw-r--r-- | binaryninjaapi.h | 7 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | binaryview.cpp | 30 |
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; |
