summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2018-11-18 14:05:34 -0500
committerPeter LaFosse <peter@vector35.com>2018-11-18 14:05:34 -0500
commit4a1d5c29b5baec20e363a976fb9bc1fc7c1b0ca8 (patch)
tree6d977ffa371ad3df8e05df6e7214848ff7b1b992
parentd8ff0a6324fe92ccafe296298409c50cc4b526fa (diff)
Add Find APIs with progress
-rw-r--r--binaryninjaapi.h10
-rw-r--r--binaryninjacore.h7
-rw-r--r--binaryview.cpp40
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);