summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2021-08-11 08:31:51 -0400
committerPeter LaFosse <peter@vector35.com>2021-09-05 10:09:10 -0400
commit64447f5c063cf0876f563d53950ea0d613136afa (patch)
treefc45819a50df487a56c603795bbf1799f6747c46
parent55cf411c056ceb725d8172cc71318d32f5a3b207 (diff)
Add TypeBuilder SetAlternateName/SetParameters/SetSigned
-rw-r--r--binaryninjaapi.h3
-rw-r--r--binaryninjacore.h4
-rw-r--r--type.cpp62
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);
diff --git a/type.cpp b/type.cpp
index 3d7339e4..4429bb60 100644
--- a/type.cpp
+++ b/type.cpp
@@ -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);