diff options
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 24 | ||||
| -rw-r--r-- | binaryview.cpp | 42 | ||||
| -rw-r--r-- | metadata.cpp | 26 | ||||
| -rw-r--r-- | settings.cpp | 1 |
5 files changed, 43 insertions, 52 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 426095b0..13ca3446 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1128,7 +1128,7 @@ namespace BinaryNinja std::vector<BNAddressRange> GetAllocatedRanges(); void StoreMetadata(const std::string& key, Metadata* inValue); - bool QueryMetadata(const std::string& key, Metadata** outValue); + std::unique_ptr<Metadata> QueryMetadata(const std::string& key); std::string GetStringMetadata(const std::string& key); std::vector<uint8_t> GetRawMetadata(const std::string& key); uint64_t GetUIntMetadata(const std::string& key); diff --git a/binaryninjacore.h b/binaryninjacore.h index 25aa150d..0394517f 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -2917,17 +2917,17 @@ extern "C" // Create Metadata of various types BINARYNINJACOREAPI BNMetadata* BNNewMetadataReference(BNMetadata* data); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredBooleanData(bool data); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredStringData(const char* data); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredUnsignedIntegerData(uint64_t data); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredSignedIntegerData(int64_t data); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredDoubleData(double data); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredBooleanListData(const bool* data, size_t size); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredStringListData(const char** data, size_t size); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredUnsignedIntegerListData(const uint64_t* data, size_t size); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredSignedIntegerListData(const int64_t* data, size_t size); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredDoubleListData(const double* data, size_t size); - BINARYNINJACOREAPI BNMetadata* BNCreateStructuredRawData(const uint8_t* data, size_t size); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataBooleanData(bool data); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataStringData(const char* data); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataUnsignedIntegerData(uint64_t data); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataSignedIntegerData(int64_t data); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataDoubleData(double data); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataBooleanListData(const bool* data, size_t size); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataStringListData(const char** data, size_t size); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataUnsignedIntegerListData(const uint64_t* data, size_t size); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataSignedIntegerListData(const int64_t* data, size_t size); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataDoubleListData(const double* data, size_t size); + BINARYNINJACOREAPI BNMetadata* BNCreateMetadataRawData(const uint8_t* data, size_t size); BINARYNINJACOREAPI void BNFreeMetadata(BNMetadata* data); BINARYNINJACOREAPI void BNFreeMetadataBooleanList(bool* data); BINARYNINJACOREAPI void BNFreeMetadataStringList(char** data, size_t size); @@ -2963,7 +2963,7 @@ extern "C" // Store/Query structured data to/from a BinaryView BINARYNINJACOREAPI void BNBinaryViewStoreMetadata(BNBinaryView* view, const char* key, BNMetadata* value); - BINARYNINJACOREAPI bool BNBinaryViewQueryMetadata(BNBinaryView* view, const char* key, BNMetadata** value); + BINARYNINJACOREAPI BNMetadata* BNBinaryViewQueryMetadata(BNBinaryView* view, const char* key); #ifdef __cplusplus } #endif diff --git a/binaryview.cpp b/binaryview.cpp index 6eb299a3..b330508d 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -20,6 +20,7 @@ #include <algorithm> #include <iterator> +#include <memory> #include "binaryninjaapi.h" using namespace BinaryNinja; @@ -1833,48 +1834,37 @@ void BinaryView::StoreMetadata(const std::string& key, Metadata* inValue) BNBinaryViewStoreMetadata(m_object, key.c_str(), inValue->GetObject()); } - -bool BinaryView::QueryMetadata(const std::string& key, Metadata** outValue) +unique_ptr<Metadata> BinaryView::QueryMetadata(const std::string& key) { - BNMetadata* value = nullptr; - bool status = BNBinaryViewQueryMetadata(m_object, key.c_str(), &value); - if (!status) - { - *outValue = nullptr; - return false; - } - *outValue = new Metadata(value); - return true; + BNMetadata* value = BNBinaryViewQueryMetadata(m_object, key.c_str()); + if (!value) + return nullptr; + auto a = new Metadata(value); + return unique_ptr<Metadata>(a); } string BinaryView::GetStringMetadata(const string& key) { - Metadata* data; - if (!QueryMetadata(key, &data) || !data || data->IsString()) + auto data = QueryMetadata(key); + if (!data || !data->IsString()) throw QueryMetadataException("Failed to find key: " + key); - auto result = data->GetString(); - delete data; - return result; + return data->GetString(); } vector<uint8_t> BinaryView::GetRawMetadata(const string& key) { - Metadata* data; - if (!QueryMetadata(key, &data) || !data || data->IsRaw()) + auto data = QueryMetadata(key); + if (!data || !data->IsRaw()) throw QueryMetadataException("Failed to find key: " + key); - auto result = data->GetRaw(); - delete data; - return result; + return data->GetRaw(); } uint64_t BinaryView::GetUIntMetadata(const string& key) { - Metadata* data; - if (!QueryMetadata(key, &data) || !data || data->IsUnsignedInteger()) + auto data = QueryMetadata(key); + if (!data || !data->IsUnsignedInteger()) throw QueryMetadataException("Failed to find key: " + key); - auto result = data->GetUnsignedInteger(); - delete data; - return result; + return data->GetUnsignedInteger(); } BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject())) diff --git a/metadata.cpp b/metadata.cpp index 2f398940..3f01f4bb 100644 --- a/metadata.cpp +++ b/metadata.cpp @@ -3,34 +3,34 @@ using namespace std; using namespace BinaryNinja; -Metadata::Metadata(BNMetadata* structuredData) +Metadata::Metadata(BNMetadata* metadata) { - m_object = structuredData; + m_object = metadata; } Metadata::Metadata(bool data) { - m_object = BNCreateStructuredBooleanData(data); + m_object = BNCreateMetadataBooleanData(data); } Metadata::Metadata(const string& data) { - m_object = BNCreateStructuredStringData(data.c_str()); + m_object = BNCreateMetadataStringData(data.c_str()); } Metadata::Metadata(uint64_t data) { - m_object = BNCreateStructuredUnsignedIntegerData(data); + m_object = BNCreateMetadataUnsignedIntegerData(data); } Metadata::Metadata(int64_t data) { - m_object = BNCreateStructuredSignedIntegerData(data); + m_object = BNCreateMetadataSignedIntegerData(data); } Metadata::Metadata(double data) { - m_object = BNCreateStructuredDoubleData(data); + m_object = BNCreateMetadataDoubleData(data); } Metadata::Metadata(const vector<bool>& data) @@ -39,7 +39,7 @@ Metadata::Metadata(const vector<bool>& data) for (size_t i = 0; i < data.size(); i++) input[i] = data[i]; - m_object = BNCreateStructuredBooleanListData(input, data.size()); + m_object = BNCreateMetadataBooleanListData(input, data.size()); delete[] input; } @@ -49,7 +49,7 @@ Metadata::Metadata(const vector<string>& data) for (size_t i = 0; i < data.size(); i++) input[i] = BNAllocString(data[i].c_str()); - m_object = BNCreateStructuredStringListData((const char**)input, data.size()); + m_object = BNCreateMetadataStringListData((const char**)input, data.size()); for (size_t i = 0; i < data.size(); i++) BNFreeString(input[i]); @@ -62,7 +62,7 @@ Metadata::Metadata(const vector<uint64_t>& data) for (size_t i = 0; i < data.size(); i++) input[i] = data[i]; - m_object = BNCreateStructuredUnsignedIntegerListData(input, data.size()); + m_object = BNCreateMetadataUnsignedIntegerListData(input, data.size()); delete[] input; } @@ -72,7 +72,7 @@ Metadata::Metadata(const vector<int64_t>& data) for (size_t i = 0; i < data.size(); i++) input[i] = data[i]; - m_object = BNCreateStructuredSignedIntegerListData(input, data.size()); + m_object = BNCreateMetadataSignedIntegerListData(input, data.size()); delete[] input; } @@ -82,7 +82,7 @@ Metadata::Metadata(const vector<double>& data) for (size_t i = 0; i < data.size(); i++) input[i] = data[i]; - m_object = BNCreateStructuredDoubleListData(input, data.size()); + m_object = BNCreateMetadataDoubleListData(input, data.size()); delete[] input; } @@ -92,7 +92,7 @@ Metadata::Metadata(const vector<uint8_t>& data) for (size_t i = 0; i < data.size(); i++) input[i] = data[i]; - m_object = BNCreateStructuredRawData(input, data.size()); + m_object = BNCreateMetadataRawData(input, data.size()); delete[] input; } diff --git a/settings.cpp b/settings.cpp index 97c2a232..b7e08793 100644 --- a/settings.cpp +++ b/settings.cpp @@ -1,4 +1,5 @@ #include "binaryninjaapi.h" +#include <string.h> using namespace BinaryNinja; using namespace std; |
