diff options
| author | Peter LaFosse <peter@vector35.com> | 2018-11-18 14:05:34 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2018-11-18 14:05:34 -0500 |
| commit | 4a1d5c29b5baec20e363a976fb9bc1fc7c1b0ca8 (patch) | |
| tree | 6d977ffa371ad3df8e05df6e7214848ff7b1b992 | |
| parent | d8ff0a6324fe92ccafe296298409c50cc4b526fa (diff) | |
Add Find APIs with progress
| -rw-r--r-- | binaryninjaapi.h | 10 | ||||
| -rw-r--r-- | binaryninjacore.h | 7 | ||||
| -rw-r--r-- | binaryview.cpp | 40 |
3 files changed, 56 insertions, 1 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 8288ea33..f907db01 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1430,9 +1430,17 @@ namespace BinaryNinja void RegisterPlatformTypes(Platform* platform); bool FindNextData(uint64_t start, const DataBuffer& data, uint64_t& addr, BNFindFlag flags = FindCaseSensitive); - bool FindNextText(uint64_t start, const std::string& data, uint64_t& addr, Ref<DisassemblySettings> settings, BNFindFlag flags = FindCaseSensitive); + bool FindNextText(uint64_t start, const std::string& data, uint64_t& addr, Ref<DisassemblySettings> settings, + BNFindFlag flags = FindCaseSensitive); bool FindNextConstant(uint64_t start, uint64_t constant, uint64_t& addr, Ref<DisassemblySettings> settings); + bool FindNextData(uint64_t start, uint64_t end, const DataBuffer& data, uint64_t& addr, BNFindFlag flags, + const std::function<bool(size_t current, size_t total)>& progress); + bool FindNextText(uint64_t start, uint64_t end, const std::string& data, uint64_t& addr, Ref<DisassemblySettings> settings, + BNFindFlag flags, const std::function<bool(size_t current, size_t total)>& progress); + bool FindNextConstant(uint64_t start, uint64_t end, uint64_t constant, uint64_t& addr, Ref<DisassemblySettings> settings, + const std::function<bool(size_t current, size_t total)>& progress); + void Reanalyze(); void ShowPlainTextReport(const std::string& title, const std::string& contents); diff --git a/binaryninjacore.h b/binaryninjacore.h index 1b20121c..14e8fb4f 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -2179,6 +2179,13 @@ extern "C" BINARYNINJACOREAPI bool BNFindNextConstant(BNBinaryView* view, uint64_t start, uint64_t constant, uint64_t* result, BNDisassemblySettings* settings); + BINARYNINJACOREAPI bool BNFindNextDataWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, BNDataBuffer* data, uint64_t* result, BNFindFlag flags, + void* ctxt, bool (*progress)(void* ctxt, size_t current, size_t total)); + BINARYNINJACOREAPI bool BNFindNextTextWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, const char* data, uint64_t* result, + BNDisassemblySettings* settings, BNFindFlag flags, void* ctxt, bool (*progress)(void* ctxt, size_t current, size_t total)); + BINARYNINJACOREAPI bool BNFindNextConstantWithProgress(BNBinaryView* view, uint64_t start, uint64_t end, uint64_t constant, uint64_t* result, + BNDisassemblySettings* settings, void* ctxt, bool (*progress)(void* ctxt, size_t current, size_t total)); + BINARYNINJACOREAPI void BNAddAutoSegment(BNBinaryView* view, uint64_t start, uint64_t length, uint64_t dataOffset, uint64_t dataLength, uint32_t flags); BINARYNINJACOREAPI void BNRemoveAutoSegment(BNBinaryView* view, uint64_t start, uint64_t length); diff --git a/binaryview.cpp b/binaryview.cpp index 984edda8..afcb4560 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -2001,6 +2001,46 @@ bool BinaryView::FindNextConstant(uint64_t start, uint64_t constant, uint64_t& r } +struct FindProgressCallbackContext +{ + std::function<bool(size_t, size_t)> func; +}; + + +static bool FindProgressCallback(void* ctxt, size_t progress, size_t total) +{ + FindProgressCallbackContext* cb = (FindProgressCallbackContext*)ctxt; + return cb->func(progress, total); +} + + +bool BinaryView::FindNextData(uint64_t start, uint64_t end, const DataBuffer& data, uint64_t& addr, BNFindFlag flags, + const std::function<bool(size_t current, size_t total)>& progress) +{ + FindProgressCallbackContext fp; + fp.func = progress; + return BNFindNextDataWithProgress(m_object, start, end, data.GetBufferObject(), &addr, flags, &fp, FindProgressCallback); +} + + +bool BinaryView::FindNextText(uint64_t start, uint64_t end, const std::string& data, uint64_t& addr, Ref<DisassemblySettings> settings, + BNFindFlag flags, const std::function<bool(size_t current, size_t total)>& progress) +{ + FindProgressCallbackContext fp; + fp.func = progress; + return BNFindNextTextWithProgress(m_object, start, end, data.c_str(), &addr, settings->GetObject(), flags, &fp, FindProgressCallback); +} + + +bool BinaryView::FindNextConstant(uint64_t start, uint64_t end, uint64_t constant, uint64_t& addr, Ref<DisassemblySettings> settings, + const std::function<bool(size_t current, size_t total)>& progress) +{ + FindProgressCallbackContext fp; + fp.func = progress; + return BNFindNextConstantWithProgress(m_object, start, end, constant, &addr, settings->GetObject(), &fp, FindProgressCallback); +} + + void BinaryView::Reanalyze() { BNReanalyzeAllFunctions(m_object); |
