diff options
| author | Xusheng <xusheng@vector35.com> | 2022-12-20 17:15:03 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2022-12-21 11:42:54 +0800 |
| commit | 0e5e2fad380cdda9e53294d90f7e0fd90c959280 (patch) | |
| tree | 54e7d187d8409d8f4fccf9a3e8a0e5e90e962fad /binaryview.cpp | |
| parent | 74dfc90a4291ff12228288e45bdbfe714869bac3 (diff) | |
Add support for adding magic values into expression parser
Diffstat (limited to 'binaryview.cpp')
| -rw-r--r-- | binaryview.cpp | 54 |
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; |
