summaryrefslogtreecommitdiff
path: root/metadata.cpp
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2017-06-24 01:33:04 -0400
committerPeter LaFosse <peter@vector35.com>2017-07-01 10:02:27 -0400
commit0de62768c8afc5ca27576b59d4591ca8dbbd7cee (patch)
treebbd69585e0705905fddef54d32e2ab50aa91f6a6 /metadata.cpp
parentb0778fc4d0271a9ba16e7c81c2c4c67a8273cda6 (diff)
Adding settings system apis, and binaryview metadata apis
Diffstat (limited to 'metadata.cpp')
-rw-r--r--metadata.cpp238
1 files changed, 238 insertions, 0 deletions
diff --git a/metadata.cpp b/metadata.cpp
new file mode 100644
index 00000000..2f398940
--- /dev/null
+++ b/metadata.cpp
@@ -0,0 +1,238 @@
+#include "binaryninjaapi.h"
+
+using namespace std;
+using namespace BinaryNinja;
+
+Metadata::Metadata(BNMetadata* structuredData)
+{
+ m_object = structuredData;
+}
+
+Metadata::Metadata(bool data)
+{
+ m_object = BNCreateStructuredBooleanData(data);
+}
+
+Metadata::Metadata(const string& data)
+{
+ m_object = BNCreateStructuredStringData(data.c_str());
+}
+
+Metadata::Metadata(uint64_t data)
+{
+ m_object = BNCreateStructuredUnsignedIntegerData(data);
+}
+
+Metadata::Metadata(int64_t data)
+{
+ m_object = BNCreateStructuredSignedIntegerData(data);
+}
+
+Metadata::Metadata(double data)
+{
+ m_object = BNCreateStructuredDoubleData(data);
+}
+
+Metadata::Metadata(const vector<bool>& data)
+{
+ auto input = new bool[data.size()];
+ for (size_t i = 0; i < data.size(); i++)
+ input[i] = data[i];
+
+ m_object = BNCreateStructuredBooleanListData(input, data.size());
+ delete[] input;
+}
+
+Metadata::Metadata(const vector<string>& data)
+{
+ char** input = new char*[data.size()];
+ for (size_t i = 0; i < data.size(); i++)
+ input[i] = BNAllocString(data[i].c_str());
+
+ m_object = BNCreateStructuredStringListData((const char**)input, data.size());
+
+ for (size_t i = 0; i < data.size(); i++)
+ BNFreeString(input[i]);
+ delete[] input;
+}
+
+Metadata::Metadata(const vector<uint64_t>& data)
+{
+ auto input = new uint64_t[data.size()];
+ for (size_t i = 0; i < data.size(); i++)
+ input[i] = data[i];
+
+ m_object = BNCreateStructuredUnsignedIntegerListData(input, data.size());
+ delete[] input;
+}
+
+Metadata::Metadata(const vector<int64_t>& data)
+{
+ auto input = new int64_t[data.size()];
+ for (size_t i = 0; i < data.size(); i++)
+ input[i] = data[i];
+
+ m_object = BNCreateStructuredSignedIntegerListData(input, data.size());
+ delete[] input;
+}
+
+Metadata::Metadata(const vector<double>& data)
+{
+ auto input = new double[data.size()];
+ for (size_t i = 0; i < data.size(); i++)
+ input[i] = data[i];
+
+ m_object = BNCreateStructuredDoubleListData(input, data.size());
+ delete[] input;
+}
+
+Metadata::Metadata(const vector<uint8_t>& data)
+{
+ auto input = new uint8_t[data.size()];
+ for (size_t i = 0; i < data.size(); i++)
+ input[i] = data[i];
+
+ m_object = BNCreateStructuredRawData(input, data.size());
+ delete[] input;
+}
+
+MetadataType Metadata::GetType() const
+{
+ return BNMetadataGetType(m_object);
+}
+
+bool Metadata::GetBoolean() const
+{
+ return BNMetadataGetBoolean(m_object);
+}
+
+string Metadata::GetString() const
+{
+ return BNMetadataGetString(m_object);
+}
+
+uint64_t Metadata::GetUnsignedInteger() const
+{
+ return BNMetadataGetUnsignedInteger(m_object);
+}
+
+int64_t Metadata::GetSignedInteger() const
+{
+ return BNMetadataGetSignedInteger(m_object);
+}
+
+double Metadata::GetDouble() const
+{
+ return BNMetadataGetDouble(m_object);
+}
+
+vector<bool> Metadata::GetBooleanList() const
+{
+ size_t outSize;
+ bool* outList = BNMetadataGetBooleanList(m_object, &outSize);
+ vector<bool> result(outList, outList + outSize);
+ BNFreeMetadataBooleanList(outList);
+ return result;
+}
+
+vector<string> Metadata::GetStringList() const
+{
+ size_t outSize;
+ char** outList = BNMetadataGetStringList(m_object, &outSize);
+ vector<string> result;
+ for (size_t i = 0; i < outSize; i++)
+ result.push_back(string(outList[i]));
+ BNFreeMetadataStringList(outList, outSize);
+ return result;
+}
+
+vector<uint64_t> Metadata::GetUnsignedIntegerList() const
+{
+ size_t outSize;
+ uint64_t* outList = BNMetadataGetUnsignedIntegerList(m_object, &outSize);
+ vector<uint64_t> result(outList, outList + outSize);
+ BNFreeMetadataUnsignedIntegerList(outList);
+ return result;
+}
+
+vector<int64_t> Metadata::GetSignedIntegerList() const
+{
+ size_t outSize;
+ int64_t* outList = BNMetadataGetSignedIntegerList(m_object, &outSize);
+ vector<int64_t> result(outList, outList + outSize);
+ BNFreeMetadataSignedIntegerList(outList);
+ return result;
+}
+
+vector<double> Metadata::GetDoubleList() const
+{
+ size_t outSize;
+ double* outList = BNMetadataGetDoubleList(m_object, &outSize);
+ vector<double> result(outList, outList + outSize);
+ BNFreeMetadataDoubleList(outList);
+ return result;
+}
+
+vector<uint8_t> Metadata::GetRaw() const
+{
+ size_t outSize;
+ uint8_t* outList = BNMetadataGetRaw(m_object, &outSize);
+ vector<uint8_t> result(outList, outList + outSize);
+ BNFreeMetadataRaw(outList);
+ return result;
+}
+
+bool Metadata::IsBoolean() const
+{
+ return BNMetadataIsBoolean(m_object);
+}
+
+bool Metadata::IsString() const
+{
+ return BNMetadataIsString(m_object);
+}
+
+bool Metadata::IsUnsignedInteger() const
+{
+ return BNMetadataIsUnsignedInteger(m_object);
+}
+
+bool Metadata::IsSignedInteger() const
+{
+ return BNMetadataIsSignedInteger(m_object);
+}
+
+bool Metadata::IsDouble() const
+{
+ return BNMetadataIsDouble(m_object);
+}
+
+bool Metadata::IsBooleanList() const
+{
+ return BNMetadataIsBooleanList(m_object);
+}
+
+bool Metadata::IsStringList() const
+{
+ return BNMetadataIsStringList(m_object);
+}
+
+bool Metadata::IsUnsignedIntegerList() const
+{
+ return BNMetadataIsUnsignedIntegerList(m_object);
+}
+
+bool Metadata::IsSignedIntegerList() const
+{
+ return BNMetadataIsSignedIntegerList(m_object);
+}
+
+bool Metadata::IsDoubleList() const
+{
+ return BNMetadataIsDoubleList(m_object);
+}
+
+bool Metadata::IsRaw() const
+{
+ return BNMetadataIsRaw(m_object);
+}