Skip to content

Commit da698e7

Browse files
committed
Add a rebased callback for binary view
1 parent ed4effd commit da698e7

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

binaryninjaapi.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3150,6 +3150,8 @@ namespace BinaryNinja {
31503150
static void UndoEntryTakenCallback(void* ctxt, BNBinaryView* data, BNUndoEntry* entry);
31513151
static void RedoEntryTakenCallback(void* ctxt, BNBinaryView* data, BNUndoEntry* entry);
31523152

3153+
static void RebasedCallback(void* ctxt, BNBinaryView* oldView, BNBinaryView* newView);
3154+
31533155
public:
31543156

31553157
enum NotificationType : uint64_t
@@ -3206,6 +3208,7 @@ namespace BinaryNinja {
32063208
UndoEntryAdded = 1ULL << 49,
32073209
UndoEntryTaken = 1ULL << 50,
32083210
RedoEntryTaken = 1ULL << 51,
3211+
Rebased = 1ULL << 52,
32093212

32103213
BinaryDataUpdates = DataWritten | DataInserted | DataRemoved,
32113214
FunctionLifetime = FunctionAdded | FunctionRemoved,
@@ -3635,6 +3638,17 @@ namespace BinaryNinja {
36353638
(void)data;
36363639
(void)entry;
36373640
}
3641+
3642+
/*! This notification is posted whenever a binary view is rebased
3643+
3644+
\param oldView BinaryView the old view
3645+
\param newView BinaryView the new view
3646+
*/
3647+
virtual void OnRebased(BinaryView* oldView, BinaryView* newView)
3648+
{
3649+
(void)oldView;
3650+
(void)newView;
3651+
}
36383652
};
36393653

36403654
/*!

binaryninjacore.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1585,6 +1585,7 @@ extern "C"
15851585
void (*undoEntryAdded)(void* ctxt, BNBinaryView* view, BNUndoEntry* entry);
15861586
void (*undoEntryTaken)(void* ctxt, BNBinaryView* view, BNUndoEntry* entry);
15871587
void (*redoEntryTaken)(void* ctxt, BNBinaryView* view, BNUndoEntry* entry);
1588+
void (*rebased)(void* ctxt, BNBinaryView* oldView, BNBinaryView* newView);
15881589
} BNBinaryDataNotification;
15891590

15901591
typedef struct BNProjectNotification

binaryview.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,15 @@ void BinaryDataNotification::RedoEntryTakenCallback(void* ctxt, BNBinaryView* da
523523
}
524524

525525

526+
void BinaryDataNotification::RebasedCallback(void *ctxt, BNBinaryView *oldView, BNBinaryView *newView)
527+
{
528+
BinaryDataNotification* notify = (BinaryDataNotification*)ctxt;
529+
Ref<BinaryView> view1 = new BinaryView(BNNewViewReference(oldView));
530+
Ref<BinaryView> view2 = new BinaryView(BNNewViewReference(newView));
531+
notify->OnRebased(view1, view2);
532+
}
533+
534+
526535
BinaryDataNotification::BinaryDataNotification()
527536
{
528537
m_callbacks.context = this;
@@ -578,6 +587,7 @@ BinaryDataNotification::BinaryDataNotification()
578587
m_callbacks.undoEntryAdded = UndoEntryAddedCallback;
579588
m_callbacks.undoEntryTaken = UndoEntryTakenCallback;
580589
m_callbacks.redoEntryTaken = RedoEntryTakenCallback;
590+
m_callbacks.rebased = RebasedCallback;
581591
}
582592

583593

@@ -636,6 +646,7 @@ BinaryDataNotification::BinaryDataNotification(NotificationTypes notifications)
636646
m_callbacks.undoEntryAdded = (notifications & NotificationType::UndoEntryAdded) ? UndoEntryAddedCallback : nullptr;
637647
m_callbacks.undoEntryTaken = (notifications & NotificationType::UndoEntryTaken) ? UndoEntryTakenCallback : nullptr;
638648
m_callbacks.redoEntryTaken = (notifications & NotificationType::RedoEntryTaken) ? RedoEntryTakenCallback : nullptr;
649+
m_callbacks.rebased = (notifications & NotificationType::Rebased) ? RebasedCallback : nullptr;
639650
}
640651

641652

0 commit comments

Comments
 (0)