summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorXusheng <xusheng@vector35.com>2021-02-05 20:28:13 +0800
committerXusheng <xusheng@vector35.com>2021-04-22 10:52:39 +0800
commitc4b1dd712783e7474570705e6d95183a0c02a76e (patch)
tree0393986e0078cb20610c8ad091db061f8f41a08b /binaryview.cpp
parenta355d5c9aa1978d10f378931bfd5f06be60bae98 (diff)
add persistent search result
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp117
1 files changed, 107 insertions, 10 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index 26ace8a9..bde0afca 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -2904,20 +2904,22 @@ void BinaryView::RegisterPlatformTypes(Platform* platform)
}
-bool BinaryView::FindNextData(uint64_t start, const DataBuffer& data, uint64_t& result, BNFindFlag flags)
+bool BinaryView::FindNextData(uint64_t start, const DataBuffer& data, uint64_t& result,
+ BNFindFlag flags)
{
return BNFindNextData(m_object, start, data.GetBufferObject(), &result, flags);
}
bool BinaryView::FindNextText(uint64_t start, const std::string& data, uint64_t& result,
- Ref<DisassemblySettings> settings, BNFindFlag flags)
+ Ref<DisassemblySettings> settings, BNFindFlag flags, BNFunctionGraphType graph)
{
- return BNFindNextText(m_object, start, data.c_str(), &result, settings->GetObject(), flags);
+ return BNFindNextText(m_object, start, data.c_str(), &result, settings->GetObject(), flags, graph);
}
-bool BinaryView::FindNextConstant(uint64_t start, uint64_t constant, uint64_t& result, Ref<DisassemblySettings> settings)
+bool BinaryView::FindNextConstant(uint64_t start, uint64_t constant, uint64_t& result,
+ Ref<DisassemblySettings> settings, BNFunctionGraphType graph)
{
- return BNFindNextConstant(m_object, start, constant, &result, settings->GetObject());
+ return BNFindNextConstant(m_object, start, constant, &result, settings->GetObject(), graph);
}
@@ -2934,6 +2936,54 @@ static bool FindProgressCallback(void* ctxt, size_t progress, size_t total)
}
+struct MatchCallbackContextForDataBuffer
+{
+ std::function<bool(uint64_t, const DataBuffer&)> func;
+};
+
+
+static bool MatchCallbackForDataBuffer(void* ctxt, uint64_t addr, BNDataBuffer* buffer)
+{
+ MatchCallbackContextForDataBuffer* cb = (MatchCallbackContextForDataBuffer*)ctxt;
+ return cb->func(addr, DataBuffer(buffer));
+}
+
+
+struct MatchCallbackContextForText
+{
+ std::function<bool(uint64_t, const string&, const LinearDisassemblyLine&)> func;
+};
+
+
+static bool MatchCallbackForText(void* ctxt, uint64_t addr, const char* buffer,
+ BNLinearDisassemblyLine* line)
+{
+ MatchCallbackContextForText* cb = (MatchCallbackContextForText*)ctxt;
+
+ LinearDisassemblyLine result = LinearDisassemblyLine::FromAPIObject(line);
+ BNFreeLinearDisassemblyLines(line, 1);
+
+ return cb->func(addr, string(buffer), result);
+}
+
+
+struct MatchCallbackContextForConstant
+{
+ std::function<bool(uint64_t, const LinearDisassemblyLine&)> func;
+};
+
+
+static bool MatchCallbackForConstant(void* ctxt, uint64_t addr, BNLinearDisassemblyLine* line)
+{
+ MatchCallbackContextForConstant* cb = (MatchCallbackContextForConstant*)ctxt;
+
+ LinearDisassemblyLine result = LinearDisassemblyLine::FromAPIObject(line);
+ BNFreeLinearDisassemblyLines(line, 1);
+
+ return cb->func(addr, result);
+}
+
+
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)
{
@@ -2943,21 +2993,68 @@ bool BinaryView::FindNextData(uint64_t start, uint64_t end, const DataBuffer& da
}
-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)
+bool BinaryView::FindNextText(uint64_t start, uint64_t end, const std::string& data,
+ uint64_t& addr, Ref<DisassemblySettings> settings, BNFindFlag flags, BNFunctionGraphType graph,
+ 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);
+ return BNFindNextTextWithProgress(m_object, start, end, data.c_str(), &addr,
+ settings->GetObject(), flags, graph, &fp, FindProgressCallback);
}
-bool BinaryView::FindNextConstant(uint64_t start, uint64_t end, uint64_t constant, uint64_t& addr, Ref<DisassemblySettings> settings,
+bool BinaryView::FindNextConstant(uint64_t start, uint64_t end, uint64_t constant, uint64_t& addr,
+ Ref<DisassemblySettings> settings, BNFunctionGraphType graph,
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);
+ return BNFindNextConstantWithProgress(m_object, start, end, constant, &addr,
+ settings->GetObject(), graph, &fp, FindProgressCallback);
+}
+
+
+bool BinaryView::FindAllData(uint64_t start, uint64_t end, const DataBuffer& data,
+ BNFindFlag flags, const std::function<bool(size_t current, size_t total)>& progress,
+ const std::function<bool(uint64_t addr, const DataBuffer& match)>& matchCallback)
+{
+ FindProgressCallbackContext fp;
+ fp.func = progress;
+ MatchCallbackContextForDataBuffer mc;
+ mc.func = matchCallback;
+ return BNFindAllDataWithProgress(m_object, start, end, data.GetBufferObject(),
+ flags, &fp, FindProgressCallback, &mc, MatchCallbackForDataBuffer);
+}
+
+
+bool BinaryView::FindAllText(uint64_t start, uint64_t end, const std::string& data,
+ Ref<DisassemblySettings> settings, BNFindFlag flags, BNFunctionGraphType graph,
+ const std::function<bool(size_t current, size_t total)>& progress,
+ const std::function<bool(uint64_t addr, const std::string& match,
+ const LinearDisassemblyLine& line)>& matchCallback)
+{
+ FindProgressCallbackContext fp;
+ fp.func = progress;
+ MatchCallbackContextForText mc;
+ mc.func = matchCallback;
+ return BNFindAllTextWithProgress(m_object, start, end, data.c_str(), settings->GetObject(),
+ flags, graph, &fp, FindProgressCallback, &mc, MatchCallbackForText);
+}
+
+
+bool BinaryView::FindAllConstant(uint64_t start, uint64_t end, uint64_t constant,
+ Ref<DisassemblySettings> settings, BNFunctionGraphType graph,
+ const std::function<bool(size_t current, size_t total)>& progress,
+ const std::function<bool(uint64_t addr, const LinearDisassemblyLine& line)>&
+ matchCallback)
+{
+ FindProgressCallbackContext fp;
+ fp.func = progress;
+ MatchCallbackContextForConstant mc;
+ mc.func = matchCallback;
+ return BNFindAllConstantWithProgress(m_object, start, end, constant, settings->GetObject(),
+ graph, &fp, FindProgressCallback, &mc, MatchCallbackForConstant);
}