summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2019-01-20 15:06:09 -0500
committerPeter LaFosse <peter@vector35.com>2019-01-20 15:06:32 -0500
commit048d2212945f43eb88889feaffdcce75633d94ec (patch)
tree746b4822a9d59064fd6d4149727c31d7fa110d4b
parent251c79b66fd552a7499e96d7ab13e3e36c726e00 (diff)
Add API for parsing multiple types with BinaryView context
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h3
-rw-r--r--binaryview.cpp24
3 files changed, 28 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index f5a59cc0..138d82c1 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1421,6 +1421,7 @@ namespace BinaryNinja
DisassemblySettings* settings);
bool ParseTypeString(const std::string& text, QualifiedNameAndType& result, std::string& errors);
+ bool ParseTypeString(const std::string& text, std::map<QualifiedName, Ref<Type>>& result, std::string& errors);
std::map<QualifiedName, Ref<Type>> GetTypes();
Ref<Type> GetTypeByName(const QualifiedName& name);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 781b1619..ea7803b6 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2740,7 +2740,10 @@ extern "C"
BINARYNINJACOREAPI bool BNParseTypeString(BNBinaryView* view, const char* text,
BNQualifiedNameAndType* result, char** errors);
+ BINARYNINJACOREAPI bool BNParseTypesString(BNBinaryView* view, const char* text,
+ BNQualifiedNameAndType** result, size_t* count, char** errors);
BINARYNINJACOREAPI void BNFreeQualifiedNameAndType(BNQualifiedNameAndType* obj);
+ BINARYNINJACOREAPI void BNFreeQualifiedNameAndTypeArray(BNQualifiedNameAndType* obj, size_t count);
BINARYNINJACOREAPI BNQualifiedNameAndType* BNGetAnalysisTypeList(BNBinaryView* view, size_t* count);
BINARYNINJACOREAPI void BNFreeTypeList(BNQualifiedNameAndType* types, size_t count);
diff --git a/binaryview.cpp b/binaryview.cpp
index 6bd04672..8479c7d0 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1842,6 +1842,30 @@ bool BinaryView::ParseTypeString(const string& text, QualifiedNameAndType& resul
}
+bool BinaryView::ParseTypeString(const string& text, std::map<QualifiedName, Ref<Type>>& result, string& errors)
+{
+ BNQualifiedNameAndType* nt;
+ char* errorStr;
+ size_t count;
+
+ if (!BNParseTypesString(m_object, text.c_str(), &nt, &count, &errorStr))
+ {
+ errors = errorStr;
+ BNFreeString(errorStr);
+ return false;
+ }
+
+ for(size_t i = 0; i < count; i++)
+ {
+ result[QualifiedName::FromAPIObject(&nt[i].name)] = new Type(BNNewTypeReference(nt[i].type));
+ }
+ BNFreeQualifiedNameAndTypeArray(nt, count);
+
+ errors = "";
+ return true;
+}
+
+
map<QualifiedName, Ref<Type>> BinaryView::GetTypes()
{
size_t count;