summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2021-08-11 08:31:03 -0400
committerPeter LaFosse <peter@vector35.com>2021-09-05 10:09:10 -0400
commit55cf411c056ceb725d8172cc71318d32f5a3b207 (patch)
treecd20baa655fdabe0207499835bcfe5a4f9ff227d
parentc7b9b0330bc3b7121d8664a3eeec174739e5cc5e (diff)
Move MemberAccess/MemberScope to StructureMember
Fix rust AddStructureMemebers
-rw-r--r--binaryninjaapi.h11
-rw-r--r--binaryninjacore.h25
-rw-r--r--rust/src/types.rs10
-rw-r--r--type.cpp61
4 files changed, 29 insertions, 78 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index ba955230..d6b8c7ac 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -2786,7 +2786,6 @@ __attribute__ ((format (printf, 1, 2)))
Ref<Enumeration> GetEnumeration() const;
Ref<NamedTypeReference> GetNamedTypeReference() const;
Confidence<BNMemberScope> GetScope() const;
- Confidence<BNMemberAccess> GetAccess() const;
Confidence<int64_t> GetStackAdjustment() const;
QualifiedName GetStructureName() const;
Ref<NamedTypeReference> GetRegisteredName() const;
@@ -2912,8 +2911,6 @@ __attribute__ ((format (printf, 1, 2)))
Ref<NamedTypeReference> GetNamedTypeReference() const;
Confidence<BNMemberScope> GetScope() const;
TypeBuilder& SetScope(const Confidence<BNMemberScope>& scope);
- Confidence<BNMemberAccess> GetAccess() const;
- TypeBuilder& SetAccess(const Confidence<BNMemberAccess>& access);
TypeBuilder& SetConst(const Confidence<bool>& cnst);
TypeBuilder& SetVolatile(const Confidence<bool>& vltl);
TypeBuilder& SetTypeName(const QualifiedName& name);
@@ -3030,6 +3027,8 @@ __attribute__ ((format (printf, 1, 2)))
Ref<Type> type;
std::string name;
uint64_t offset;
+ BNMemberAccess access;
+ BNMemberScope scope;
};
class Structure: public CoreRefCountObject<BNStructure, BNNewStructureReference, BNFreeStructure>
@@ -3084,9 +3083,11 @@ __attribute__ ((format (printf, 1, 2)))
bool IsUnion() const;
StructureBuilder& SetStructureType(BNStructureVariant type);
BNStructureVariant GetStructureType() const;
- StructureBuilder& AddMember(const Confidence<Ref<Type>>& type, const std::string& name);
+ StructureBuilder& AddMember(const Confidence<Ref<Type>>& type, const std::string& name,
+ BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope);
StructureBuilder& AddMemberAtOffset(const Confidence<Ref<Type>>& type,
- const std::string& name, uint64_t offset, bool overwriteExisting = true);
+ const std::string& name, uint64_t offset, bool overwriteExisting = true,
+ BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope);
StructureBuilder& RemoveMember(size_t idx);
StructureBuilder& ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name, bool overwriteExisting = true);
};
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 42f60158..e32314e0 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1904,18 +1904,6 @@ extern "C"
uint8_t confidence;
};
- struct BNMemberScopeWithConfidence
- {
- BNMemberScope value;
- uint8_t confidence;
- };
-
- struct BNMemberAccessWithConfidence
- {
- BNMemberAccess value;
- uint8_t confidence;
- };
-
struct BNParameterVariablesWithConfidence
{
BNVariable* vars;
@@ -1951,6 +1939,8 @@ extern "C"
char* name;
uint64_t offset;
uint8_t typeConfidence;
+ BNMemberAccess access;
+ BNMemberScope scope;
};
struct BNEnumerationMember
@@ -4731,8 +4721,6 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI BNNamedTypeReference* BNGetTypeNamedTypeReference(BNType* type);
BINARYNINJACOREAPI uint64_t BNGetTypeElementCount(BNType* type);
BINARYNINJACOREAPI uint64_t BNGetTypeOffset(BNType* type);
- BINARYNINJACOREAPI BNMemberScopeWithConfidence BNTypeGetMemberScope(BNType* type);
- BINARYNINJACOREAPI BNMemberAccessWithConfidence BNTypeGetMemberAccess(BNType* type);
BINARYNINJACOREAPI BNOffsetWithConfidence BNGetTypeStackAdjustment(BNType* type);
BINARYNINJACOREAPI BNQualifiedName BNTypeGetStructureName(BNType* type);
BINARYNINJACOREAPI BNNamedTypeReference* BNGetRegisteredTypeName(BNType* type);
@@ -4776,10 +4764,6 @@ __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 BNMemberScopeWithConfidence BNTypeBuilderGetMemberScope(BNTypeBuilder* type);
- BINARYNINJACOREAPI void BNTypeBuilderSetMemberScope(BNTypeBuilder* type, BNMemberScopeWithConfidence* scope);
- BINARYNINJACOREAPI BNMemberAccessWithConfidence BNTypeBuilderGetMemberAccess(BNTypeBuilder* type);
- BINARYNINJACOREAPI void BNTypeBuilderSetMemberAccess(BNTypeBuilder* type, BNMemberAccessWithConfidence* access);
BINARYNINJACOREAPI void BNTypeBuilderSetConst(BNTypeBuilder* type, BNBoolWithConfidence* cnst);
BINARYNINJACOREAPI void BNTypeBuilderSetVolatile(BNTypeBuilder* type, BNBoolWithConfidence* vltl);
BINARYNINJACOREAPI BNOffsetWithConfidence BNGetTypeBuilderStackAdjustment(BNTypeBuilder* type);
@@ -4859,10 +4843,11 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI void BNSetStructureBuilderType(BNStructureBuilder* s, BNStructureVariant type);
BINARYNINJACOREAPI BNStructureVariant BNGetStructureBuilderType(BNStructureBuilder* s);
- BINARYNINJACOREAPI void BNAddStructureBuilderMember(BNStructureBuilder* s, const BNTypeWithConfidence* const type, const char* name);
+ BINARYNINJACOREAPI void BNAddStructureBuilderMember(BNStructureBuilder* s, const BNTypeWithConfidence* const type,
+ const char* name, BNMemberAccess access, BNMemberScope scope);
BINARYNINJACOREAPI void BNAddStructureBuilderMemberAtOffset(BNStructureBuilder* s,
const BNTypeWithConfidence* const type, const char* name, uint64_t offset,
- bool overwriteExisting);
+ bool overwriteExisting, BNMemberAccess access, BNMemberScope scope);
BINARYNINJACOREAPI void BNRemoveStructureBuilderMember(BNStructureBuilder* s, size_t idx);
BINARYNINJACOREAPI void BNReplaceStructureBuilderMember(BNStructureBuilder* s, size_t idx,
const BNTypeWithConfidence* const type, const char* name, bool overwriteExisting);
diff --git a/rust/src/types.rs b/rust/src/types.rs
index 45ea6d7d..c56611d0 100644
--- a/rust/src/types.rs
+++ b/rust/src/types.rs
@@ -1203,7 +1203,7 @@ impl ToOwned for Enumeration {
//////////////////////
// StructureBuilder
-pub type StructureType = BNStructureType;
+pub type StructureType = BNStructureVariant;
#[derive(PartialEq, Eq, Hash)]
pub struct StructureBuilder {
@@ -1263,10 +1263,12 @@ impl StructureBuilder {
&'a mut self,
t: T,
name: S,
+ access: BNMemberAccess,
+ scope: BNMemberScope,
) -> &'a mut Self {
let name = name.as_bytes_with_nul();
unsafe {
- BNAddStructureBuilderMember(self.handle, &t.into().into(), name.as_ref().as_ptr() as _);
+ BNAddStructureBuilderMember(self.handle, &t.into().into(), name.as_ref().as_ptr() as _, access, scope);
}
self
@@ -1278,6 +1280,8 @@ impl StructureBuilder {
name: S,
offset: u64,
overwrite_existing: bool,
+ access: BNMemberAccess,
+ scope: BNMemberScope,
) -> &'a mut Self {
let name = name.as_bytes_with_nul();
unsafe {
@@ -1287,6 +1291,8 @@ impl StructureBuilder {
name.as_ref().as_ptr() as _,
offset,
overwrite_existing,
+ access,
+ scope
);
}
diff --git a/type.cpp b/type.cpp
index 1ae7f711..3d7339e4 100644
--- a/type.cpp
+++ b/type.cpp
@@ -496,20 +496,6 @@ Confidence<bool> Type::IsConst() const
}
-Confidence<BNMemberScope> Type::GetScope() const
-{
- BNMemberScopeWithConfidence result = BNTypeGetMemberScope(m_object);
- return Confidence<BNMemberScope>(result.value, result.confidence);
-}
-
-
-Confidence<BNMemberAccess> Type::GetAccess() const
-{
- BNMemberAccessWithConfidence result = BNTypeGetMemberAccess(m_object);
- return Confidence<BNMemberAccess>(result.value, result.confidence);
-}
-
-
Confidence<Ref<Type>> Type::GetChildType() const
{
BNTypeWithConfidence type = BNGetChildType(m_object);
@@ -1133,39 +1119,6 @@ void TypeBuilder::SetIntegerTypeDisplayType(BNIntegerDisplayType displayType)
BNSetIntegerTypeDisplayType(m_object, displayType);
}
-Confidence<BNMemberScope> TypeBuilder::GetScope() const
-{
- BNMemberScopeWithConfidence result = BNTypeBuilderGetMemberScope(m_object);
- return Confidence<BNMemberScope>(result.value, result.confidence);
-}
-
-
-TypeBuilder& TypeBuilder::SetScope(const Confidence<BNMemberScope>& scope)
-{
- BNMemberScopeWithConfidence mc;
- mc.value = scope.GetValue();
- mc.confidence = scope.GetConfidence();
- BNTypeBuilderSetMemberScope(m_object, &mc);
- return *this;
-}
-
-
-Confidence<BNMemberAccess> TypeBuilder::GetAccess() const
-{
- BNMemberAccessWithConfidence result = BNTypeBuilderGetMemberAccess(m_object);
- return Confidence<BNMemberAccess>(result.value, result.confidence);
-}
-
-
-TypeBuilder& TypeBuilder::SetAccess(const Confidence<BNMemberAccess>& access)
-{
- BNMemberAccessWithConfidence mc;
- mc.value = access.GetValue();
- mc.confidence = access.GetConfidence();
- BNTypeBuilderSetMemberAccess(m_object, &mc);
- return *this;
-}
-
TypeBuilder& TypeBuilder::SetConst(const Confidence<bool>& cnst)
{
@@ -1447,6 +1400,11 @@ TypeBuilder TypeBuilder::EnumerationType(Architecture* arch, EnumerationBuilder*
}
+TypeBuilder TypeBuilder::EnumerationType(Enumeration* enm, size_t width, bool isSigned)
+{
+ return TypeBuilder(BNCreateEnumerationTypeBuilderOfWidth(enm->GetObject(), width, isSigned));
+}
+
TypeBuilder TypeBuilder::PointerType(Architecture* arch, const Confidence<Ref<Type>>& type,
const Confidence<bool>& cnst, const Confidence<bool>& vltl, BNReferenceType refType)
{
@@ -2035,23 +1993,24 @@ BNStructureVariant StructureBuilder::GetStructureType() const
}
-StructureBuilder& StructureBuilder::AddMember(const Confidence<Ref<Type>>& type, const string& name)
+StructureBuilder& StructureBuilder::AddMember(const Confidence<Ref<Type>>& type, const string& name,
+ BNMemberAccess access, BNMemberScope scope)
{
BNTypeWithConfidence tc;
tc.type = type->GetObject();
tc.confidence = type.GetConfidence();
- BNAddStructureBuilderMember(m_object, &tc, name.c_str());
+ BNAddStructureBuilderMember(m_object, &tc, name.c_str(), access, scope);
return *this;
}
StructureBuilder& StructureBuilder::AddMemberAtOffset(const Confidence<Ref<Type>>& type,
- const string& name, uint64_t offset, bool overwriteExisting)
+ const string& name, uint64_t offset, bool overwriteExisting, BNMemberAccess access, BNMemberScope scope)
{
BNTypeWithConfidence tc;
tc.type = type->GetObject();
tc.confidence = type.GetConfidence();
- BNAddStructureBuilderMemberAtOffset(m_object, &tc, name.c_str(), offset, overwriteExisting);
+ BNAddStructureBuilderMemberAtOffset(m_object, &tc, name.c_str(), offset, overwriteExisting, access, scope);
return *this;
}