diff options
| author | Brian Potchik <brian@vector35.com> | 2023-08-10 16:41:26 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2023-08-10 16:41:26 -0400 |
| commit | e280f8d5b348808a06d73e7a5db91e13b58d2c16 (patch) | |
| tree | be6b5abd5ee0a624bf3b21ab1bc3c79dd58d02ef | |
| parent | b6ce48c4f5be4cd43482e1ff762e088fd11b7227 (diff) | |
Add OnNotificationBarrier callback and the ability to selectively enable notification callbacks.
| -rw-r--r-- | binaryninjaapi.h | 112 | ||||
| -rw-r--r-- | binaryninjacore.h | 14 | ||||
| -rw-r--r-- | binaryview.cpp | 54 | ||||
| -rw-r--r-- | examples/triage/exports.cpp | 2 | ||||
| -rw-r--r-- | python/binaryview.py | 17 | ||||
| -rw-r--r-- | ui/featuremap.h | 3 | ||||
| -rw-r--r-- | ui/stringsview.h | 9 | ||||
| -rw-r--r-- | ui/tokenizedtextview.h | 3 | ||||
| -rw-r--r-- | ui/typeview.h | 12 |
9 files changed, 178 insertions, 48 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 4bd32e83..cb33aeff 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -2520,6 +2520,7 @@ namespace BinaryNinja { private: BNBinaryDataNotification m_callbacks; + static uint64_t NotificationBarrierCallback(void* ctxt, BNBinaryView* object); 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); @@ -2531,44 +2532,115 @@ namespace BinaryNinja { 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 SymbolUpdatedCallback(void* ctxt, BNBinaryView* view, BNSymbol* sym); + static void DataMetadataUpdatedCallback(void* ctxt, BNBinaryView* object, uint64_t offset); static void TagTypeUpdatedCallback(void* ctxt, BNBinaryView* object, BNTagType* tagType); static void TagAddedCallback(void* ctxt, BNBinaryView* object, BNTagReference* tagRef); - static void TagUpdatedCallback(void* ctxt, BNBinaryView* object, BNTagReference* tagRef); static void TagRemovedCallback(void* ctxt, BNBinaryView* object, BNTagReference* tagRef); + static void TagUpdatedCallback(void* ctxt, BNBinaryView* object, BNTagReference* tagRef); + 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); + static void StringRemovedCallback(void* ctxt, BNBinaryView* data, BNStringType type, uint64_t offset, size_t len); static void TypeDefinedCallback(void* ctxt, BNBinaryView* data, BNQualifiedName* name, BNType* type); static void TypeUndefinedCallback(void* ctxt, BNBinaryView* data, BNQualifiedName* name, BNType* type); static void TypeReferenceChangedCallback(void* ctx, BNBinaryView* data, BNQualifiedName* name, BNType* type); - static void TypeFieldReferenceChangedCallback( - void* ctx, BNBinaryView* data, BNQualifiedName* name, uint64_t offset); + static void TypeFieldReferenceChangedCallback(void* ctx, BNBinaryView* data, BNQualifiedName* name, uint64_t offset); static void SegmentAddedCallback(void* ctx, BNBinaryView* data, BNSegment* segment); - static void SegmentUpdatedCallback(void* ctx, BNBinaryView* data, BNSegment* segment); static void SegmentRemovedCallback(void* ctx, BNBinaryView* data, BNSegment* segment); + static void SegmentUpdatedCallback(void* ctx, BNBinaryView* data, BNSegment* segment); + static void SectionAddedCallback(void* ctx, BNBinaryView* data, BNSection* section); - static void SectionUpdatedCallback(void* ctx, BNBinaryView* data, BNSection* section); static void SectionRemovedCallback(void* ctx, BNBinaryView* data, BNSection* section); + static void SectionUpdatedCallback(void* ctx, BNBinaryView* data, BNSection* section); + static void ComponentNameUpdatedCallback(void* ctxt, BNBinaryView* data, char* previousName, BNComponent* component); static void ComponentAddedCallback(void* ctxt, BNBinaryView* data, BNComponent* component); - static void ComponentRemovedCallback( - void* ctxt, BNBinaryView* data, BNComponent* formerParent, BNComponent* component); - static void ComponentMovedCallback( - void* ctxt, BNBinaryView* data, BNComponent* formerParent, BNComponent* newParent, BNComponent* component); + static void ComponentRemovedCallback(void* ctxt, BNBinaryView* data, BNComponent* formerParent, BNComponent* component); + static void ComponentMovedCallback(void* ctxt, BNBinaryView* data, BNComponent* formerParent, BNComponent* newParent, BNComponent* component); static void ComponentFunctionAddedCallback(void* ctxt, BNBinaryView* data, BNComponent* component, BNFunction* function); static void ComponentFunctionRemovedCallback(void* ctxt, BNBinaryView* data, BNComponent* component, BNFunction* function); static void ComponentDataVariableAddedCallback(void* ctxt, BNBinaryView* data, BNComponent* component, BNDataVariable* var); static void ComponentDataVariableRemovedCallback(void* ctxt, BNBinaryView* data, BNComponent* component, BNDataVariable* var); public: + + enum NotificationType : uint64_t + { + NotificationBarrier = 1ULL << 0, + DataWritten = 1ULL << 1, + DataInserted = 1ULL << 2, + DataRemoved = 1ULL << 3, + FunctionAdded = 1ULL << 4, + FunctionRemoved = 1ULL << 5, + FunctionUpdated = 1ULL << 6, + FunctionUpdateRequested = 1ULL << 7, + DataVariableAdded = 1ULL << 8, + DataVariableRemoved = 1ULL << 9, + DataVariableUpdated = 1ULL << 10, + DataMetadataUpdated = 1ULL << 11, + TagTypeUpdated = 1ULL << 12, + TagAdded = 1ULL << 13, + TagRemoved = 1ULL << 14, + TagUpdated = 1ULL << 15, + SymbolAdded = 1ULL << 16, + SymbolRemoved = 1ULL << 17, + SymbolUpdated = 1ULL << 18, + StringFound = 1ULL << 19, + StringRemoved = 1ULL << 20, + TypeDefined = 1ULL << 21, + TypeUndefined = 1ULL << 22, + TypeReferenceChanged = 1ULL << 23, + TypeFieldReferenceChanged = 1ULL << 24, + SegmentAdded = 1ULL << 25, + SegmentRemoved = 1ULL << 26, + SegmentUpdated = 1ULL << 27, + SectionAdded = 1ULL << 28, + SectionRemoved = 1ULL << 29, + SectionUpdated = 1ULL << 30, + ComponentNameUpdated = 1ULL << 31, + ComponentAdded = 1ULL << 32, + ComponentRemoved = 1ULL << 33, + ComponentMoved = 1ULL << 34, + ComponentFunctionAdded = 1ULL << 35, + ComponentFunctionRemoved = 1ULL << 36, + ComponentDataVariableAdded = 1ULL << 37, + ComponentDataVariableRemoved = 1ULL << 38, + + BinaryDataUpdates = DataWritten | DataInserted | DataRemoved, + FunctionLifetime = FunctionAdded | FunctionRemoved, + FunctionUpdates = FunctionLifetime | FunctionUpdated, + DataVariableLifetime = DataVariableAdded | DataVariableRemoved, + DataVariableUpdates = DataVariableLifetime | DataVariableUpdated, + TagLifetime = TagAdded | TagRemoved, + TagUpdates = TagLifetime | TagUpdated, + SymbolLifetime = SymbolAdded | SymbolRemoved, + SymbolUpdates = SymbolLifetime | SymbolUpdated, + StringUpdates = StringFound | StringRemoved, + TypeLifetime = TypeDefined | TypeUndefined, + TypeUpdates = TypeLifetime | TypeReferenceChanged | TypeFieldReferenceChanged, + SegmentLifetime = SegmentAdded | SegmentRemoved, + SegmentUpdates = SegmentLifetime | SegmentUpdated, + SectionLifetime = SectionAdded | SectionRemoved, + SectionUpdates = SectionLifetime | SectionUpdated, + ComponentUpdates = ComponentAdded | ComponentRemoved | ComponentMoved | ComponentFunctionAdded | ComponentFunctionRemoved | ComponentDataVariableAdded | ComponentDataVariableRemoved + }; + + using NotificationTypes = uint64_t; + BinaryDataNotification(); + BinaryDataNotification(NotificationTypes notifications); + virtual ~BinaryDataNotification() {} BNBinaryDataNotification* GetCallbacks() { return &m_callbacks; } + virtual uint64_t OnNotificationBarrier(BinaryView* view) + { + (void)view; + return 0; + } virtual void OnBinaryDataWritten(BinaryView* view, uint64_t offset, size_t len) { (void)view; @@ -2637,12 +2709,12 @@ namespace BinaryNinja { (void)view; (void)tagRef; } - virtual void OnTagUpdated(BinaryView* view, const TagReference& tagRef) + virtual void OnTagRemoved(BinaryView* view, const TagReference& tagRef) { (void)view; (void)tagRef; } - virtual void OnTagRemoved(BinaryView* view, const TagReference& tagRef) + virtual void OnTagUpdated(BinaryView* view, const TagReference& tagRef) { (void)view; (void)tagRef; @@ -2652,12 +2724,12 @@ namespace BinaryNinja { (void)view; (void)sym; } - virtual void OnSymbolUpdated(BinaryView* view, Symbol* sym) + virtual void OnSymbolRemoved(BinaryView* view, Symbol* sym) { (void)view; (void)sym; } - virtual void OnSymbolRemoved(BinaryView* view, Symbol* sym) + virtual void OnSymbolUpdated(BinaryView* view, Symbol* sym) { (void)view; (void)sym; @@ -2705,12 +2777,12 @@ namespace BinaryNinja { (void)data; (void)segment; } - virtual void OnSegmentUpdated(BinaryView* data, Segment* segment) + virtual void OnSegmentRemoved(BinaryView* data, Segment* segment) { (void)data; (void)segment; } - virtual void OnSegmentRemoved(BinaryView* data, Segment* segment) + virtual void OnSegmentUpdated(BinaryView* data, Segment* segment) { (void)data; (void)segment; @@ -2720,12 +2792,12 @@ namespace BinaryNinja { (void)data; (void)section; } - virtual void OnSectionUpdated(BinaryView* data, Section* section) + virtual void OnSectionRemoved(BinaryView* data, Section* section) { (void)data; (void)section; } - virtual void OnSectionRemoved(BinaryView* data, Section* section) + virtual void OnSectionUpdated(BinaryView* data, Section* section) { (void)data; (void)section; diff --git a/binaryninjacore.h b/binaryninjacore.h index e6b34506..ae918cd5 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -37,14 +37,14 @@ // Current ABI version for linking to the core. This is incremented any time // there are changes to the API that affect linking, including new functions, // new types, or modifications to existing functions or types. -#define BN_CURRENT_CORE_ABI_VERSION 38 +#define BN_CURRENT_CORE_ABI_VERSION 39 // Minimum ABI version that is supported for loading of plugins. Plugins that // are linked to an ABI version less than this will not be able to load and // will require rebuilding. The minimum version is increased when there are // incompatible changes that break binary compatibility, such as changes to // existing types or functions. -#define BN_MINIMUM_CORE_ABI_VERSION 38 +#define BN_MINIMUM_CORE_ABI_VERSION 39 #ifdef __GNUC__ #ifdef BINARYNINJACORE_LIBRARY @@ -1439,6 +1439,7 @@ extern "C" typedef struct BNBinaryDataNotification { void* context; + uint64_t (*notificationBarrier)(void*ctxt, BNBinaryView* view); void (*dataWritten)(void* ctxt, BNBinaryView* view, uint64_t offset, size_t len); void (*dataInserted)(void* ctxt, BNBinaryView* view, uint64_t offset, size_t len); void (*dataRemoved)(void* ctxt, BNBinaryView* view, uint64_t offset, uint64_t len); @@ -1452,11 +1453,12 @@ extern "C" void (*dataMetadataUpdated)(void* ctxt, BNBinaryView* view, uint64_t offset); void (*tagTypeUpdated)(void* ctxt, BNBinaryView* view, BNTagType* tagType); void (*tagAdded)(void* ctxt, BNBinaryView* view, BNTagReference* tagRef); - void (*tagUpdated)(void* ctxt, BNBinaryView* view, BNTagReference* tagRef); void (*tagRemoved)(void* ctxt, BNBinaryView* view, BNTagReference* tagRef); + void (*tagUpdated)(void* ctxt, BNBinaryView* view, BNTagReference* tagRef); + 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 (*symbolUpdated)(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); @@ -1464,11 +1466,11 @@ extern "C" void (*typeReferenceChanged)(void* ctxt, BNBinaryView* view, BNQualifiedName* name, BNType* type); void (*typeFieldReferenceChanged)(void* ctxt, BNBinaryView* view, BNQualifiedName* name, uint64_t offset); void (*segmentAdded)(void* ctxt, BNBinaryView* view, BNSegment* segment); - void (*segmentUpdated)(void* ctxt, BNBinaryView* view, BNSegment* segment); void (*segmentRemoved)(void* ctxt, BNBinaryView* view, BNSegment* segment); + void (*segmentUpdated)(void* ctxt, BNBinaryView* view, BNSegment* segment); void (*sectionAdded)(void* ctxt, BNBinaryView* view, BNSection* section); - void (*sectionUpdated)(void* ctxt, BNBinaryView* view, BNSection* section); void (*sectionRemoved)(void* ctxt, BNBinaryView* view, BNSection* section); + void (*sectionUpdated)(void* ctxt, BNBinaryView* view, BNSection* section); void (*componentNameUpdated)(void* ctxt, BNBinaryView* view, char* previousName, BNComponent* component); void (*componentAdded)(void*ctxt, BNBinaryView* view, BNComponent* component); void (*componentMoved)(void*ctxt, BNBinaryView* view, BNComponent* formerParent, BNComponent* newParent, BNComponent* component); diff --git a/binaryview.cpp b/binaryview.cpp index 2be28283..b1bd6f4d 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -38,6 +38,14 @@ struct SymbolQueueAddContext }; +uint64_t BinaryDataNotification::NotificationBarrierCallback(void* ctxt, BNBinaryView* object) +{ + BinaryDataNotification* notify = (BinaryDataNotification*)ctxt; + Ref<BinaryView> view = new BinaryView(BNNewViewReference(object)); + return notify->OnNotificationBarrier(view); +} + + void BinaryDataNotification::DataWrittenCallback(void* ctxt, BNBinaryView* object, uint64_t offset, size_t len) { BinaryDataNotification* notify = (BinaryDataNotification*)ctxt; @@ -403,6 +411,7 @@ void BinaryDataNotification::ComponentDataVariableRemovedCallback(void* ctxt, BN BinaryDataNotification::BinaryDataNotification() { m_callbacks.context = this; + m_callbacks.notificationBarrier = nullptr; m_callbacks.dataWritten = DataWrittenCallback; m_callbacks.dataInserted = DataInsertedCallback; m_callbacks.dataRemoved = DataRemovedCallback; @@ -444,6 +453,51 @@ BinaryDataNotification::BinaryDataNotification() } +BinaryDataNotification::BinaryDataNotification(NotificationTypes notifications) +{ + m_callbacks.context = this; + m_callbacks.notificationBarrier = (notifications & NotificationType::NotificationBarrier) ? NotificationBarrierCallback : nullptr; + m_callbacks.dataWritten = (notifications & NotificationType::DataWritten) ? DataWrittenCallback : nullptr; + m_callbacks.dataInserted = (notifications & NotificationType::DataInserted) ? DataInsertedCallback : nullptr; + m_callbacks.dataRemoved = (notifications & NotificationType::DataRemoved) ? DataRemovedCallback : nullptr; + m_callbacks.functionAdded = (notifications & NotificationType::FunctionAdded) ? FunctionAddedCallback : nullptr; + m_callbacks.functionRemoved = (notifications & NotificationType::FunctionRemoved) ? FunctionRemovedCallback : nullptr; + m_callbacks.functionUpdated = (notifications & NotificationType::FunctionUpdated) ? FunctionUpdatedCallback : nullptr; + m_callbacks.functionUpdateRequested = (notifications & NotificationType::FunctionUpdateRequested) ? FunctionUpdateRequestedCallback : nullptr; + m_callbacks.dataVariableAdded = (notifications & NotificationType::DataVariableAdded) ? DataVariableAddedCallback : nullptr; + m_callbacks.dataVariableRemoved = (notifications & NotificationType::DataVariableRemoved) ? DataVariableRemovedCallback : nullptr; + m_callbacks.dataVariableUpdated = (notifications & NotificationType::DataVariableUpdated) ? DataVariableUpdatedCallback : nullptr; + m_callbacks.dataMetadataUpdated = (notifications & NotificationType::DataMetadataUpdated) ? DataMetadataUpdatedCallback : nullptr; + m_callbacks.tagTypeUpdated = (notifications & NotificationType::TagTypeUpdated) ? TagTypeUpdatedCallback : nullptr; + m_callbacks.tagAdded = (notifications & NotificationType::TagAdded) ? TagAddedCallback : nullptr; + m_callbacks.tagUpdated = (notifications & NotificationType::TagUpdated) ? TagUpdatedCallback : nullptr; + m_callbacks.tagRemoved = (notifications & NotificationType::TagRemoved) ? TagRemovedCallback : nullptr; + m_callbacks.symbolAdded = (notifications & NotificationType::SymbolAdded) ? SymbolAddedCallback : nullptr; + m_callbacks.symbolUpdated = (notifications & NotificationType::SymbolUpdated) ? SymbolUpdatedCallback : nullptr; + m_callbacks.symbolRemoved = (notifications & NotificationType::SymbolRemoved) ? SymbolRemovedCallback : nullptr; + m_callbacks.stringFound = (notifications & NotificationType::StringFound) ? StringFoundCallback : nullptr; + m_callbacks.stringRemoved = (notifications & NotificationType::StringRemoved) ? StringRemovedCallback : nullptr; + m_callbacks.typeDefined = (notifications & NotificationType::TypeDefined) ? TypeDefinedCallback : nullptr; + m_callbacks.typeUndefined = (notifications & NotificationType::TypeUndefined) ? TypeUndefinedCallback : nullptr; + m_callbacks.typeReferenceChanged = (notifications & NotificationType::TypeReferenceChanged) ? TypeReferenceChangedCallback : nullptr; + m_callbacks.typeFieldReferenceChanged = (notifications & NotificationType::TypeFieldReferenceChanged) ? TypeFieldReferenceChangedCallback : nullptr; + m_callbacks.segmentAdded = (notifications & NotificationType::SegmentAdded) ? SegmentAddedCallback : nullptr; + m_callbacks.segmentUpdated = (notifications & NotificationType::SegmentUpdated) ? SegmentUpdatedCallback : nullptr; + m_callbacks.segmentRemoved = (notifications & NotificationType::SegmentRemoved) ? SegmentRemovedCallback : nullptr; + m_callbacks.sectionAdded = (notifications & NotificationType::SectionAdded) ? SectionAddedCallback : nullptr; + m_callbacks.sectionUpdated = (notifications & NotificationType::SectionUpdated) ? SectionUpdatedCallback : nullptr; + m_callbacks.sectionRemoved = (notifications & NotificationType::SectionRemoved) ? SectionRemovedCallback : nullptr; + m_callbacks.componentNameUpdated = (notifications & NotificationType::ComponentNameUpdated) ? ComponentNameUpdatedCallback : nullptr; + m_callbacks.componentAdded = (notifications & NotificationType::ComponentAdded) ? ComponentAddedCallback : nullptr; + m_callbacks.componentRemoved = (notifications & NotificationType::ComponentRemoved) ? ComponentRemovedCallback : nullptr; + m_callbacks.componentMoved = (notifications & NotificationType::ComponentMoved) ? ComponentMovedCallback : nullptr; + m_callbacks.componentFunctionAdded = (notifications & NotificationType::ComponentFunctionAdded) ? ComponentFunctionAddedCallback : nullptr; + m_callbacks.componentFunctionRemoved = (notifications & NotificationType::ComponentFunctionRemoved) ? ComponentFunctionRemovedCallback : nullptr; + m_callbacks.componentDataVariableAdded = (notifications & NotificationType::ComponentDataVariableAdded) ? ComponentDataVariableAddedCallback : nullptr; + m_callbacks.componentDataVariableRemoved = (notifications & NotificationType::ComponentDataVariableRemoved) ? ComponentDataVariableRemovedCallback : nullptr; +} + + Symbol::Symbol(BNSymbolType type, const string& shortName, const string& fullName, const string& rawName, uint64_t addr, BNSymbolBinding binding, const NameSpace& nameSpace, uint64_t ordinal) { diff --git a/examples/triage/exports.cpp b/examples/triage/exports.cpp index 452401f2..05662eeb 100644 --- a/examples/triage/exports.cpp +++ b/examples/triage/exports.cpp @@ -14,7 +14,7 @@ const int ColumnCount = 3; const int ColumnVisibleRole = Qt::UserRole; -GenericExportsModel::GenericExportsModel(BinaryViewRef data) +GenericExportsModel::GenericExportsModel(BinaryViewRef data): BinaryDataNotification(FunctionUpdates | SymbolUpdates) { m_sortOrder = Qt::AscendingOrder; m_data = data; diff --git a/python/binaryview.py b/python/binaryview.py index d94621f7..3f2d9a20 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -467,6 +467,7 @@ class BinaryDataNotificationCallbacks: self._notify = notify self._cb = core.BNBinaryDataNotification() self._cb.context = 0 + self._cb.notificationBarrier = self._cb.notificationBarrier.__class__(self._notification_barrier) self._cb.dataWritten = self._cb.dataWritten.__class__(self._data_written) self._cb.dataInserted = self._cb.dataInserted.__class__(self._data_inserted) self._cb.dataRemoved = self._cb.dataRemoved.__class__(self._data_removed) @@ -480,11 +481,12 @@ class BinaryDataNotificationCallbacks: self._cb.dataMetadataUpdated = self._cb.dataMetadataUpdated.__class__(self._data_metadata_updated) self._cb.tagTypeUpdated = self._cb.tagTypeUpdated.__class__(self._tag_type_updated) self._cb.tagAdded = self._cb.tagAdded.__class__(self._tag_added) - self._cb.tagUpdated = self._cb.tagUpdated.__class__(self._tag_updated) self._cb.tagRemoved = self._cb.tagRemoved.__class__(self._tag_removed) + self._cb.tagUpdated = self._cb.tagUpdated.__class__(self._tag_updated) + self._cb.symbolAdded = self._cb.symbolAdded.__class__(self._symbol_added) - self._cb.symbolUpdated = self._cb.symbolUpdated.__class__(self._symbol_updated) self._cb.symbolRemoved = self._cb.symbolRemoved.__class__(self._symbol_removed) + self._cb.symbolUpdated = self._cb.symbolUpdated.__class__(self._symbol_updated) self._cb.stringFound = self._cb.stringFound.__class__(self._string_found) self._cb.stringRemoved = self._cb.stringRemoved.__class__(self._string_removed) self._cb.typeDefined = self._cb.typeDefined.__class__(self._type_defined) @@ -492,11 +494,12 @@ class BinaryDataNotificationCallbacks: self._cb.typeReferenceChanged = self._cb.typeReferenceChanged.__class__(self._type_ref_changed) self._cb.typeFieldReferenceChanged = self._cb.typeFieldReferenceChanged.__class__(self._type_field_ref_changed) self._cb.segmentAdded = self._cb.segmentAdded.__class__(self._segment_added) - self._cb.segmentUpdated = self._cb.segmentUpdated.__class__(self._segment_updated) self._cb.segmentRemoved = self._cb.segmentRemoved.__class__(self._segment_removed) + self._cb.segmentUpdated = self._cb.segmentUpdated.__class__(self._segment_updated) + self._cb.sectionAdded = self._cb.sectionAdded.__class__(self._section_added) - self._cb.sectionUpdated = self._cb.sectionUpdated.__class__(self._section_updated) self._cb.sectionRemoved = self._cb.sectionRemoved.__class__(self._section_removed) + self._cb.sectionUpdated = self._cb.sectionUpdated.__class__(self._section_updated) self._cb.componentNameUpdated = self._cb.componentNameUpdated.__class__(self._component_name_updated) self._cb.componentAdded = self._cb.componentAdded.__class__(self._component_added) self._cb.componentRemoved = self._cb.componentRemoved.__class__(self._component_removed) @@ -512,6 +515,12 @@ class BinaryDataNotificationCallbacks: def _unregister(self) -> None: core.BNUnregisterDataNotification(self._view.handle, self._cb) + def _notification_barrier(self, ctxt, view: core.BNBinaryView) -> None: + try: + self._notify.notification_barrier(self._view) + except OSError: + log_error(traceback.format_exc()) + def _data_written(self, ctxt, view: core.BNBinaryView, offset: int, length: int) -> None: try: self._notify.data_written(self._view, offset, length) diff --git a/ui/featuremap.h b/ui/featuremap.h index 9376aa5d..8a5d3d19 100644 --- a/ui/featuremap.h +++ b/ui/featuremap.h @@ -99,8 +99,7 @@ class BINARYNINJAUIAPI FeatureMap : public QWidget, public BinaryNinja::BinaryDa virtual void OnDataVariableRemoved(BinaryNinja::BinaryView* data, const BinaryNinja::DataVariable& var) override; virtual void OnDataVariableUpdated(BinaryNinja::BinaryView* data, const BinaryNinja::DataVariable& var) override; virtual void OnStringFound(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; - virtual void OnStringRemoved( - BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; + virtual void OnStringRemoved(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; void drawImageRect(uint64_t addr, size_t len, uint8_t color); diff --git a/ui/stringsview.h b/ui/stringsview.h index 100a496f..be52aebd 100644 --- a/ui/stringsview.h +++ b/ui/stringsview.h @@ -18,7 +18,7 @@ \ingroup uiapi */ -/*! +/*! \ingroup stringsview */ @@ -67,8 +67,7 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina QModelIndex findString(const BNStringReference& ref); virtual void OnStringFound(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; - virtual void OnStringRemoved( - BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; + virtual void OnStringRemoved(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; void updateStrings(); void setFilter(const std::string& filter); @@ -91,7 +90,7 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina bool getIncludeOnlyFromCurrentFunction() const { return m_includeOnlyFromCurrentFunction; }; }; -/*! +/*! \ingroup stringsview */ @@ -118,7 +117,7 @@ class BINARYNINJAUIAPI StringItemDelegate : public QStyledItemDelegate class StringsContainer; class StringsViewSidebarWidget; -/*! +/*! \ingroup stringsview */ diff --git a/ui/tokenizedtextview.h b/ui/tokenizedtextview.h index 0624564d..979908f3 100644 --- a/ui/tokenizedtextview.h +++ b/ui/tokenizedtextview.h @@ -76,8 +76,7 @@ class BINARYNINJAUIAPI TokenizedTextView : void scrollLines(int count); void bindActions(); - void getHexDumpLineBytes( - const BinaryNinja::LinearDisassemblyLine& line, size_t& skippedBytes, size_t& totalBytes, size_t& totalCols); + void getHexDumpLineBytes(const BinaryNinja::LinearDisassemblyLine& line, size_t& skippedBytes, size_t& totalBytes, size_t& totalCols); void setSectionSemantics(const std::string& name, BNSectionSemantics semantics); diff --git a/ui/typeview.h b/ui/typeview.h index 845bc6bc..a7d447fd 100644 --- a/ui/typeview.h +++ b/ui/typeview.h @@ -220,14 +220,10 @@ class BINARYNINJAUIAPI TypeView : public QAbstractScrollArea, public View, publi uint64_t findMatchingLine(const BinaryNinja::QualifiedName& name, uint64_t offset, size_t& cursorOffset); bool navigateToType(const std::string& name, uint64_t offset = 0); - virtual void OnTypeDefined( - BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override; - virtual void OnTypeUndefined( - BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override; - virtual void OnTypeReferenceChanged( - BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override; - virtual void OnTypeFieldReferenceChanged( - BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, uint64_t offset) override; + virtual void OnTypeDefined(BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override; + virtual void OnTypeUndefined(BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override; + virtual void OnTypeReferenceChanged(BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override; + virtual void OnTypeFieldReferenceChanged(BinaryNinja::BinaryView* view, const BinaryNinja::QualifiedName& name, uint64_t offset) override; void MarkFilterChanged() { |
