summaryrefslogtreecommitdiff
path: root/binaryview.cpp
diff options
context:
space:
mode:
authorXusheng <xusheng@vector35.com>2022-12-20 17:15:03 +0800
committerXusheng <xusheng@vector35.com>2022-12-21 11:42:54 +0800
commit0e5e2fad380cdda9e53294d90f7e0fd90c959280 (patch)
tree54e7d187d8409d8f4fccf9a3e8a0e5e90e962fad /binaryview.cpp
parent74dfc90a4291ff12228288e45bdbfe714869bac3 (diff)
Add support for adding magic values into expression parser
Diffstat (limited to 'binaryview.cpp')
-rw-r--r--binaryview.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/binaryview.cpp b/binaryview.cpp
index 1eb96e51..bcdeb724 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -4293,6 +4293,60 @@ Ref<Logger> BinaryView::CreateLogger(const string& name)
}
+void BinaryView::AddExpressionParserMagicValue(const std::string& name, uint64_t value)
+{
+ BNAddExpressionParserMagicValue(m_object, name.c_str(), value);
+}
+
+
+void BinaryView::RemoveExpressionParserMagicValue(const string& name)
+{
+ BNRemoveExpressionParserMagicValue(m_object, name.c_str());
+}
+
+
+void BinaryView::AddExpressionParserMagicValues(const std::vector<std::string>& names, const std::vector<uint64_t>& values)
+{
+ if (names.empty() || values.empty() || (names.size() != values.size()))
+ return;
+
+ const char** namesArray = new const char*[names.size()];
+ auto* valuesArray = new uint64_t[names.size()];
+
+ for (size_t i = 0; i < names.size(); i++)
+ {
+ namesArray[i] = names[i].c_str();
+ valuesArray[i] = values[i];
+ }
+
+ BNAddExpressionParserMagicValues(m_object, namesArray, valuesArray, names.size());
+
+ delete[] namesArray;
+ delete[] valuesArray;
+}
+
+
+bool BinaryView::GetExpressionParserMagicValue(const std::string& name, uint64_t* value)
+{
+ return BNGetExpressionParserMagicValue(m_object, name.c_str(), value);
+}
+
+
+void BinaryView::RemoveExpressionParserMagicValues(const vector<string>& names)
+{
+ if (names.empty())
+ return;
+
+ const char** toRemove = new const char*[names.size()];
+ for (size_t i = 0; i < names.size(); i++)
+ toRemove[i] = names[i].c_str();
+
+ BNRemoveExpressionParserMagicValues(m_object, toRemove, names.size());
+
+ delete[] toRemove;
+}
+
+
Relocation::Relocation(BNRelocation* reloc)
{
m_object = reloc;