summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2019-11-14 19:11:42 -0500
committerBrian Potchik <brian@vector35.com>2019-11-14 19:11:42 -0500
commitbce6c88c9eb1ae1aa33ef0affdb7dbda8814cf88 (patch)
treedc1a0bf82f9ac847d55084fa65c60633b8efe536
parent989600b83515dfe35494c3ffd0c6371cc5baddcf (diff)
Initial dynamic rebasing support.
-rw-r--r--binaryninjaapi.h3
-rw-r--r--binaryninjacore.h3
-rw-r--r--filemetadata.cpp14
-rw-r--r--python/binaryview.py14
-rw-r--r--ui/filecontext.h1
5 files changed, 35 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index fc225316..94bfb8cc 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -909,6 +909,9 @@ __attribute__ ((format (printf, 1, 2)))
bool SaveAutoSnapshot(BinaryView* data,
const std::function<void(size_t progress, size_t total)>& progressCallback);
+ bool Rebase(BinaryView* data, uint64_t address);
+ bool Rebase(BinaryView* data, uint64_t address, const std::function<void(size_t progress, size_t total)>& progressCallback);
+
void BeginUndoActions();
void CommitUndoActions();
diff --git a/binaryninjacore.h b/binaryninjacore.h
index a9dae964..bd66661d 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2200,6 +2200,9 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI bool BNSaveAutoSnapshotWithProgress(BNBinaryView* data, void* ctxt,
void (*progress)(void* ctxt, size_t progress, size_t total));
+ BINARYNINJACOREAPI bool BNRebase(BNBinaryView* data, uint64_t address);
+ BINARYNINJACOREAPI bool BNRebaseWithProgress(BNBinaryView* data, uint64_t address, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total));
+
BINARYNINJACOREAPI char* BNGetOriginalFilename(BNFileMetadata* file);
BINARYNINJACOREAPI void BNSetOriginalFilename(BNFileMetadata* file, const char* name);
diff --git a/filemetadata.cpp b/filemetadata.cpp
index d1d2ed2b..a10071c5 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -330,6 +330,20 @@ bool FileMetadata::SaveAutoSnapshot(BinaryView* data,
}
+bool FileMetadata::Rebase(BinaryView* data, uint64_t address)
+{
+ return BNRebase(data->GetObject(), address);
+}
+
+
+bool FileMetadata::Rebase(BinaryView* data, uint64_t address, const function<void(size_t progress, size_t total)>& progressCallback)
+{
+ DatabaseProgressCallbackContext cb;
+ cb.func = progressCallback;
+ return BNRebaseWithProgress(data->GetObject(), address, &cb, DatabaseProgressCallback);
+}
+
+
void FileMetadata::BeginUndoActions()
{
BNBeginUndoActions(m_object);
diff --git a/python/binaryview.py b/python/binaryview.py
index 2663b677..4aa245d2 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -4870,6 +4870,20 @@ class BinaryView(object):
"""
core.BNReanalyzeAllFunctions(self.handle)
+ def rebase(self, address, progress_func = None):
+ """
+ ``rebase`` rebase the binary view at the specified virtual address
+
+ :param int address: virtual address of the start of the binary view
+ :return: boolean True on success, False on failure.
+ :rtype: bool
+ """
+ if progress_func is None:
+ return core.BNRebase(self.handle, address)
+ else:
+ return core.BNRebaseWithProgress(self.handle, address, None, ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
+ lambda ctxt, cur, total: progress_func(cur, total)))
+
def show_plain_text_report(self, title, contents):
core.BNShowPlainTextReport(self.handle, title, contents)
diff --git a/ui/filecontext.h b/ui/filecontext.h
index 007dcfc4..6a4f13ee 100644
--- a/ui/filecontext.h
+++ b/ui/filecontext.h
@@ -56,6 +56,7 @@ public:
BinaryViewRef createDataView(const QString& type);
BinaryViewRef getDataView(const QString& type, bool createView = false);
std::vector<BinaryViewRef> getAllDataViews();
+ void refreshDataViewCache();
void setCurrentViewFrame(ViewFrame* view);