From 55cf411c056ceb725d8172cc71318d32f5a3b207 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Wed, 11 Aug 2021 08:31:03 -0400 Subject: Move MemberAccess/MemberScope to StructureMember Fix rust AddStructureMemebers --- binaryninjaapi.h | 11 +++++----- binaryninjacore.h | 25 +++++------------------ rust/src/types.rs | 10 +++++++-- type.cpp | 61 +++++++++---------------------------------------------- 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 GetEnumeration() const; Ref GetNamedTypeReference() const; Confidence GetScope() const; - Confidence GetAccess() const; Confidence GetStackAdjustment() const; QualifiedName GetStructureName() const; Ref GetRegisteredName() const; @@ -2912,8 +2911,6 @@ __attribute__ ((format (printf, 1, 2))) Ref GetNamedTypeReference() const; Confidence GetScope() const; TypeBuilder& SetScope(const Confidence& scope); - Confidence GetAccess() const; - TypeBuilder& SetAccess(const Confidence& access); TypeBuilder& SetConst(const Confidence& cnst); TypeBuilder& SetVolatile(const Confidence& vltl); TypeBuilder& SetTypeName(const QualifiedName& name); @@ -3030,6 +3027,8 @@ __attribute__ ((format (printf, 1, 2))) Ref type; std::string name; uint64_t offset; + BNMemberAccess access; + BNMemberScope scope; }; class Structure: public CoreRefCountObject @@ -3084,9 +3083,11 @@ __attribute__ ((format (printf, 1, 2))) bool IsUnion() const; StructureBuilder& SetStructureType(BNStructureVariant type); BNStructureVariant GetStructureType() const; - StructureBuilder& AddMember(const Confidence>& type, const std::string& name); + StructureBuilder& AddMember(const Confidence>& type, const std::string& name, + BNMemberAccess access = NoAccess, BNMemberScope scope = NoScope); StructureBuilder& AddMemberAtOffset(const Confidence>& 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>& 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 Type::IsConst() const } -Confidence Type::GetScope() const -{ - BNMemberScopeWithConfidence result = BNTypeGetMemberScope(m_object); - return Confidence(result.value, result.confidence); -} - - -Confidence Type::GetAccess() const -{ - BNMemberAccessWithConfidence result = BNTypeGetMemberAccess(m_object); - return Confidence(result.value, result.confidence); -} - - Confidence> Type::GetChildType() const { BNTypeWithConfidence type = BNGetChildType(m_object); @@ -1133,39 +1119,6 @@ void TypeBuilder::SetIntegerTypeDisplayType(BNIntegerDisplayType displayType) BNSetIntegerTypeDisplayType(m_object, displayType); } -Confidence TypeBuilder::GetScope() const -{ - BNMemberScopeWithConfidence result = BNTypeBuilderGetMemberScope(m_object); - return Confidence(result.value, result.confidence); -} - - -TypeBuilder& TypeBuilder::SetScope(const Confidence& scope) -{ - BNMemberScopeWithConfidence mc; - mc.value = scope.GetValue(); - mc.confidence = scope.GetConfidence(); - BNTypeBuilderSetMemberScope(m_object, &mc); - return *this; -} - - -Confidence TypeBuilder::GetAccess() const -{ - BNMemberAccessWithConfidence result = BNTypeBuilderGetMemberAccess(m_object); - return Confidence(result.value, result.confidence); -} - - -TypeBuilder& TypeBuilder::SetAccess(const Confidence& access) -{ - BNMemberAccessWithConfidence mc; - mc.value = access.GetValue(); - mc.confidence = access.GetConfidence(); - BNTypeBuilderSetMemberAccess(m_object, &mc); - return *this; -} - TypeBuilder& TypeBuilder::SetConst(const Confidence& 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>& type, const Confidence& cnst, const Confidence& vltl, BNReferenceType refType) { @@ -2035,23 +1993,24 @@ BNStructureVariant StructureBuilder::GetStructureType() const } -StructureBuilder& StructureBuilder::AddMember(const Confidence>& type, const string& name) +StructureBuilder& StructureBuilder::AddMember(const Confidence>& 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>& 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; } -- cgit v1.3.1