From 3afb333272dd7133236d5fbffc64ec3e61ee2af8 Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Mon, 18 Aug 2025 12:36:40 -0400 Subject: Add ability to rebase the current view through the UIContext. --- python/binaryview.py | 7 ++++++- ui/uicontext.h | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/python/binaryview.py b/python/binaryview.py index ff106f28..e0c6cf10 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -9506,7 +9506,8 @@ to a the type "tagRECT" found in the typelibrary "winX64common" ``rebase`` rebase the existing :py:class:`BinaryView` into a new :py:class:`BinaryView` at the specified virtual address .. note:: This method does not update corresponding UI components. If the `BinaryView` is associated with \ - UI components then initiate the rebase operation within the UI, e.g. using the command palette. If working with views that \ + UI components then initiate the rebase operation within the UI, e.g. using the command palette or \ + ``binaryninjaui.UIContext.activeContext().rebaseCurrentView()``. If working with views that \ are not associated with UI components while the UI is active, then set ``force`` to ``True`` to enable rebasing. :param int address: virtual address of the start of the :py:class:`BinaryView` @@ -9521,6 +9522,10 @@ to a the type "tagRECT" found in the typelibrary "winX64common" >>> newbv = bv.rebase(0x400000) >>> print(newbv) + >>> + >>> # For rebasing the current view in the UI: + >>> import binaryninjaui + >>> execute_on_main_thread_and_wait(lambda: binaryninjaui.UIContext.activeContext().rebaseCurrentView(0x800000)) """ result = False if core.BNIsUIEnabled() and not force: diff --git a/ui/uicontext.h b/ui/uicontext.h index bfa265a9..b59db8b1 100644 --- a/ui/uicontext.h +++ b/ui/uicontext.h @@ -449,11 +449,13 @@ public: Get the currently visible View for the currently visible ViewFrame (if it exists) \return Current View or nullptr if the current ViewFrame is null or does not have a View */ + virtual View* getCurrentView() = 0; /*! Get the currently visible ViewFrame (if it exists) \return Current ViewFrame or nullptr if the current widget does not have a ViewFrame */ + virtual ViewFrame* getCurrentViewFrame() = 0; /*! Get the current Action Handler for the focused widget @@ -461,6 +463,13 @@ public: */ virtual UIActionHandler* getCurrentActionHandler() = 0; + /*! + Rebase the current BinaryView to a new address, updating the UI appropriately. + \param address New address for rebasing the current BinaryView + \return True if the rebase was successful, false otherwise + */ + virtual bool rebaseCurrentView(uint64_t address) = 0; + /*! Open a tab containing the given widget with the given name \param name Name for tab -- cgit v1.3.1