summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2018-11-08 09:58:36 -0500
committerPeter LaFosse <peter@vector35.com>2018-11-13 11:07:27 -0500
commitd8ff0a6324fe92ccafe296298409c50cc4b526fa (patch)
treec5bf8cdf43902d3122a6747d5c42d9197afc0808 /binaryview.cpp
parent9df7c7c621c82e6caa7a09c4273e4feba86277f2 (diff)
Add expression parsing APIs
Add text-based and constant-based searching
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index 1302b0cb..984edda8 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1989,6 +1989,17 @@ bool BinaryView::FindNextData(uint64_t start, const DataBuffer& data, uint64_t&
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)
+{
+ return BNFindNextText(m_object, start, data.c_str(), &result, settings->GetObject(), flags);
+}
+
+bool BinaryView::FindNextConstant(uint64_t start, uint64_t constant, uint64_t& result, Ref<DisassemblySettings> settings)
+{
+ return BNFindNextConstant(m_object, start, constant, &result, settings->GetObject());
+}
+
void BinaryView::Reanalyze()
{
@@ -2303,6 +2314,20 @@ NameSpace BinaryView::GetExternalNameSpace()
}
+bool BinaryView::ParseExpression(const string& expression, uint64_t &offset, uint64_t here, string& errorString)
+{
+ char* err = nullptr;
+ if (!BNParseExpression(m_object, expression.c_str(), &offset, here, &err))
+ {
+ LogDebug("Failed to parse expression: '%s': Error: '%s'", expression.c_str(), err);
+ errorString = string(err);
+ BNFreeParseError(err);
+ return false;
+ }
+ return true;
+}
+
+
Relocation::Relocation(BNRelocation* reloc)
{
m_object = reloc;