diff options
| author | Peter LaFosse <peter@vector35.com> | 2021-08-11 08:31:51 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2021-09-05 10:09:10 -0400 |
| commit | 64447f5c063cf0876f563d53950ea0d613136afa (patch) | |
| tree | fc45819a50df487a56c603795bbf1799f6747c46 | |
| parent | 55cf411c056ceb725d8172cc71318d32f5a3b207 (diff) | |
Add TypeBuilder SetAlternateName/SetParameters/SetSigned
| -rw-r--r-- | binaryninjaapi.h | 3 | ||||
| -rw-r--r-- | binaryninjacore.h | 4 | ||||
| -rw-r--r-- | type.cpp | 62 |
3 files changed, 49 insertions, 20 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index d6b8c7ac..0dafe793 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -2913,7 +2913,9 @@ __attribute__ ((format (printf, 1, 2))) TypeBuilder& SetScope(const Confidence<BNMemberScope>& scope); TypeBuilder& SetConst(const Confidence<bool>& cnst); TypeBuilder& SetVolatile(const Confidence<bool>& vltl); + TypeBuilder& SetSigned(const Confidence<bool>& vltl); TypeBuilder& SetTypeName(const QualifiedName& name); + TypeBuilder& SetAlternateName(const std::string& name); Confidence<int64_t> GetStackAdjustment() const; QualifiedName GetStructureName() const; @@ -2921,6 +2923,7 @@ __attribute__ ((format (printf, 1, 2))) uint64_t GetOffset() const; TypeBuilder& SetFunctionCanReturn(const Confidence<bool>& canReturn); + TypeBuilder& SetParameters(const std::vector<FunctionParameter>& params); std::string GetString(Platform* platform = nullptr) const; std::string GetTypeAndName(const QualifiedName& name) const; diff --git a/binaryninjacore.h b/binaryninjacore.h index e32314e0..0b11c6f6 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -4746,6 +4746,7 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI BNQualifiedName BNTypeBuilderGetTypeName(BNTypeBuilder* nt); BINARYNINJACOREAPI void BNTypeBuilderSetTypeName(BNTypeBuilder* type, BNQualifiedName* name); + BINARYNINJACOREAPI void BNTypeBuilderSetAlternateName(BNTypeBuilder* type, const char* name); BINARYNINJACOREAPI BNTypeClass BNGetTypeBuilderClass(BNTypeBuilder* type); BINARYNINJACOREAPI uint64_t BNGetTypeBuilderWidth(BNTypeBuilder* type); BINARYNINJACOREAPI size_t BNGetTypeBuilderAlignment(BNTypeBuilder* type); @@ -4764,11 +4765,14 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI uint64_t BNGetTypeBuilderElementCount(BNTypeBuilder* type); BINARYNINJACOREAPI uint64_t BNGetTypeBuilderOffset(BNTypeBuilder* type); BINARYNINJACOREAPI void BNSetFunctionTypeBuilderCanReturn(BNTypeBuilder* type, BNBoolWithConfidence* canReturn); + BINARYNINJACOREAPI void BNSetFunctionTypeBuilderParameters(BNTypeBuilder* type, BNFunctionParameter* params, size_t paramCount); BINARYNINJACOREAPI void BNTypeBuilderSetConst(BNTypeBuilder* type, BNBoolWithConfidence* cnst); BINARYNINJACOREAPI void BNTypeBuilderSetVolatile(BNTypeBuilder* type, BNBoolWithConfidence* vltl); + BINARYNINJACOREAPI void BNTypeBuilderSetSigned(BNTypeBuilder* type, BNBoolWithConfidence* sign); BINARYNINJACOREAPI BNOffsetWithConfidence BNGetTypeBuilderStackAdjustment(BNTypeBuilder* type); BINARYNINJACOREAPI BNQualifiedName BNTypeBuilderGetStructureName(BNTypeBuilder* type); BINARYNINJACOREAPI BNReferenceType BNTypeBuilderGetReferenceType(BNTypeBuilder* type); + BINARYNINJACOREAPI char* BNGetTypeBuilderAlternateName(BNTypeBuilder* type); BINARYNINJACOREAPI char* BNGetTypeBuilderString(BNTypeBuilder* type, BNPlatform* platform); BINARYNINJACOREAPI char* BNGetTypeBuilderStringBeforeName(BNTypeBuilder* type, BNPlatform* platform); @@ -892,12 +892,6 @@ string Type::GetAutoDebugTypeIdSource() } -bool Type::IsReferenceOfType(BNNamedTypeReferenceClass refType) -{ - return (GetClass() == NamedTypeReferenceClass) && (GetNamedTypeReference()->GetTypeClass() == refType); -} - - QualifiedName Type::GetTypeName() const { BNQualifiedName name = BNTypeGetTypeName(m_object); @@ -1140,6 +1134,16 @@ TypeBuilder& TypeBuilder::SetVolatile(const Confidence<bool>& vltl) } +TypeBuilder& TypeBuilder::SetSigned(const Confidence<bool>& s) +{ + BNBoolWithConfidence bc; + bc.value = s.GetValue(); + bc.confidence = s.GetConfidence(); + BNTypeBuilderSetSigned(m_object, &bc); + return *this; +} + + Confidence<Ref<Type>> TypeBuilder::GetChildType() const { BNTypeWithConfidence type = BNGetTypeBuilderChildType(m_object); @@ -1452,6 +1456,23 @@ TypeBuilder TypeBuilder::ArrayType(const Confidence<Ref<Type>>& type, uint64_t e } +static BNFunctionParameter* GetParamArray(const std::vector<FunctionParameter>& params, size_t& count) +{ + BNFunctionParameter* paramArray = new BNFunctionParameter[params.size()]; + for (size_t i = 0; i < params.size(); i++) + { + paramArray[i].name = (char*)params[i].name.c_str(); + paramArray[i].type = params[i].type->GetObject(); + paramArray[i].typeConfidence = params[i].type.GetConfidence(); + paramArray[i].defaultLocation = params[i].defaultLocation; + paramArray[i].location.type = params[i].location.type; + paramArray[i].location.index = params[i].location.index; + paramArray[i].location.storage = params[i].location.storage; + } + count = params.size(); + return paramArray; +} + TypeBuilder TypeBuilder::FunctionType(const Confidence<Ref<Type>>& returnValue, const Confidence<Ref<CallingConvention>>& callingConvention, const std::vector<FunctionParameter>& params, const Confidence<bool>& varArg, @@ -1465,17 +1486,8 @@ TypeBuilder TypeBuilder::FunctionType(const Confidence<Ref<Type>>& returnValue, callingConventionConf.convention = callingConvention ? callingConvention->GetObject() : nullptr; callingConventionConf.confidence = callingConvention.GetConfidence(); - BNFunctionParameter* paramArray = new BNFunctionParameter[params.size()]; - for (size_t i = 0; i < params.size(); i++) - { - paramArray[i].name = (char*)params[i].name.c_str(); - paramArray[i].type = params[i].type->GetObject(); - paramArray[i].typeConfidence = params[i].type.GetConfidence(); - paramArray[i].defaultLocation = params[i].defaultLocation; - paramArray[i].location.type = params[i].location.type; - paramArray[i].location.index = params[i].location.index; - paramArray[i].location.storage = params[i].location.storage; - } + size_t paramCount = 0; + BNFunctionParameter* paramArray = GetParamArray(params, paramCount); BNBoolWithConfidence varArgConf; varArgConf.value = varArg.GetValue(); @@ -1486,7 +1498,7 @@ TypeBuilder TypeBuilder::FunctionType(const Confidence<Ref<Type>>& returnValue, stackAdjustConf.confidence = stackAdjust.GetConfidence(); TypeBuilder type(BNCreateFunctionTypeBuilder(&returnValueConf, &callingConventionConf, - paramArray, params.size(), &varArgConf, &stackAdjustConf)); + paramArray, paramCount, &varArgConf, &stackAdjustConf)); delete[] paramArray; return type; } @@ -1502,9 +1514,12 @@ TypeBuilder& TypeBuilder::SetFunctionCanReturn(const Confidence<bool>& canReturn } -bool TypeBuilder::IsReferenceOfType(BNNamedTypeReferenceClass refType) +TypeBuilder& TypeBuilder::SetParameters(const std::vector<FunctionParameter>& params) { - return (GetClass() == NamedTypeReferenceClass) && (GetNamedTypeReference()->GetTypeClass() == refType); + size_t paramCount = 0; + BNFunctionParameter* paramArray = GetParamArray(params, paramCount); + BNSetFunctionTypeBuilderParameters(m_object, paramArray, paramCount); + return *this; } @@ -1526,6 +1541,13 @@ TypeBuilder& TypeBuilder::SetTypeName(const QualifiedName& names) } +TypeBuilder& TypeBuilder::SetAlternateName(const string& name) +{ + BNTypeBuilderSetAlternateName(m_object, name.c_str()); + return *this; +} + + QualifiedName TypeBuilder::GetStructureName() const { BNQualifiedName name = BNTypeBuilderGetStructureName(m_object); |
