diff options
| author | Peter LaFosse <peter@vector35.com> | 2021-08-11 08:31:03 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2021-09-05 10:09:10 -0400 |
| commit | 55cf411c056ceb725d8172cc71318d32f5a3b207 (patch) | |
| tree | cd20baa655fdabe0207499835bcfe5a4f9ff227d | |
| parent | c7b9b0330bc3b7121d8664a3eeec174739e5cc5e (diff) | |
Move MemberAccess/MemberScope to StructureMember
Fix rust AddStructureMemebers
| -rw-r--r-- | binaryninjaapi.h | 11 | ||||
| -rw-r--r-- | binaryninjacore.h | 25 | ||||
| -rw-r--r-- | rust/src/types.rs | 10 | ||||
| -rw-r--r-- | 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<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 ); } @@ -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; } |
