diff options
| author | Brian Potchik <brian@vector35.com> | 2019-11-14 19:11:42 -0500 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2019-11-14 19:11:42 -0500 |
| commit | bce6c88c9eb1ae1aa33ef0affdb7dbda8814cf88 (patch) | |
| tree | dc1a0bf82f9ac847d55084fa65c60633b8efe536 | |
| parent | 989600b83515dfe35494c3ffd0c6371cc5baddcf (diff) | |
Initial dynamic rebasing support.
| -rw-r--r-- | binaryninjaapi.h | 3 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | filemetadata.cpp | 14 | ||||
| -rw-r--r-- | python/binaryview.py | 14 | ||||
| -rw-r--r-- | ui/filecontext.h | 1 |
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); |
