diff options
| author | Peter LaFosse <peter@vector35.com> | 2019-01-20 15:06:09 -0500 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2019-01-20 15:06:32 -0500 |
| commit | 048d2212945f43eb88889feaffdcce75633d94ec (patch) | |
| tree | 746b4822a9d59064fd6d4149727c31d7fa110d4b | |
| parent | 251c79b66fd552a7499e96d7ab13e3e36c726e00 (diff) | |
Add API for parsing multiple types with BinaryView context
| -rw-r--r-- | binaryninjaapi.h | 1 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | binaryview.cpp | 24 |
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; |
