diff options
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 2 | ||||
| -rw-r--r-- | python/types.py | 49 | ||||
| -rw-r--r-- | type.cpp | 14 |
4 files changed, 49 insertions, 18 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 36b37006..b1b2be65 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -6451,6 +6451,7 @@ namespace BinaryNinja { Ref<Enumeration> GetEnumeration() const; Ref<NamedTypeReference> GetNamedTypeReference() const; Confidence<BNMemberScope> GetScope() const; + TypeBuilder& SetNamedTypeReference(NamedTypeReference* ntr); TypeBuilder& SetScope(const Confidence<BNMemberScope>& scope); TypeBuilder& SetConst(const Confidence<bool>& cnst); TypeBuilder& SetVolatile(const Confidence<bool>& vltl); @@ -6466,6 +6467,7 @@ namespace BinaryNinja { uint64_t GetOffset() const; uint32_t GetSystemCallNumber() const; + TypeBuilder& SetOffset(uint64_t offset); TypeBuilder& SetFunctionCanReturn(const Confidence<bool>& canReturn); TypeBuilder& SetParameters(const std::vector<FunctionParameter>& params); diff --git a/binaryninjacore.h b/binaryninjacore.h index 2eb698fe..c3209b80 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -5302,8 +5302,10 @@ extern "C" BINARYNINJACOREAPI BNStructure* BNGetTypeBuilderStructure(BNTypeBuilder* type); BINARYNINJACOREAPI BNEnumeration* BNGetTypeBuilderEnumeration(BNTypeBuilder* type); BINARYNINJACOREAPI BNNamedTypeReference* BNGetTypeBuilderNamedTypeReference(BNTypeBuilder* type); + BINARYNINJACOREAPI void BNSetTypeBuilderNamedTypeReference(BNTypeBuilder* type, BNNamedTypeReference* ntr); BINARYNINJACOREAPI uint64_t BNGetTypeBuilderElementCount(BNTypeBuilder* type); BINARYNINJACOREAPI uint64_t BNGetTypeBuilderOffset(BNTypeBuilder* type); + BINARYNINJACOREAPI void BNSetTypeBuilderOffset(BNTypeBuilder* type, uint64_t offset); BINARYNINJACOREAPI void BNSetFunctionTypeBuilderCanReturn(BNTypeBuilder* type, BNBoolWithConfidence* canReturn); BINARYNINJACOREAPI void BNSetFunctionTypeBuilderParameters( BNTypeBuilder* type, BNFunctionParameter* params, size_t paramCount); diff --git a/python/types.py b/python/types.py index 6ca9434c..51f71c90 100644 --- a/python/types.py +++ b/python/types.py @@ -884,6 +884,32 @@ class PointerBuilder(TypeBuilder): def children(self) -> List[TypeBuilder]: return [self.target] + @property + def offset(self) -> int: + return core.BNGetTypeBuilderOffset(self._handle) + + @offset.setter + def offset(self, offset: int) -> int: + return core.BNSetTypeBuilderOffset(self._handle, offset) + + @property + def origin(self) -> Optional[Tuple['QualifiedName', int]]: + ntr_handle = core.BNGetTypeBuilderNamedTypeReference(self._handle) + if ntr_handle is None: + return None + name = core.BNGetTypeReferenceName(ntr_handle) + core.BNFreeNamedTypeReference(ntr_handle) + if name is None: + return None + qn = QualifiedName._from_core_struct(name) + core.BNFreeQualifiedName(name) + return (qn, self.offset) + + @origin.setter + def origin(self, origin: 'NamedTypeReferenceType'): + core.BNSetTypeBuilderNamedTypeReference(self._handle, origin.ntr_handle) + + class ArrayBuilder(TypeBuilder): @classmethod def create( @@ -2460,26 +2486,13 @@ class PointerType(Type): ntr_handle = core.BNGetTypeNamedTypeReference(self._handle) if ntr_handle is None: return None - name = core.BNGetTypeReferenceName(ntr_handle) - type_name = QualifiedName._from_core_struct(name) + core.BNFreeNamedTypeReference(ntr_handle) + if name is None: + return None + qn = QualifiedName._from_core_struct(name) core.BNFreeQualifiedName(name) - - type_id = core.BNGetTypeReferenceId(ntr_handle) - t = None - if bv is not None: - t = bv.get_type_by_id(type_id) - - alignment = 0 - if t is not None: - alignment = t.alignment - width = 0 - if t is not None: - width = t.width - - type_class = core.BNGetTypeReferenceClass(ntr_handle) - - return (NamedTypeReferenceType.create(type_class, type_id, type_name, alignment, width, self.platform, self.confidence, self.const, self.volatile), self.offset) + return (qn, self.offset) @property def target(self) -> Type: @@ -1409,6 +1409,13 @@ Ref<NamedTypeReference> TypeBuilder::GetNamedTypeReference() const } +TypeBuilder& TypeBuilder::SetNamedTypeReference(NamedTypeReference* ntr) +{ + BNSetTypeBuilderNamedTypeReference(m_object, ntr ? ntr->GetObject() : nullptr); + return *this; +} + + uint64_t TypeBuilder::GetElementCount() const { return BNGetTypeBuilderElementCount(m_object); @@ -1421,6 +1428,13 @@ uint64_t TypeBuilder::GetOffset() const } +TypeBuilder& TypeBuilder::SetOffset(uint64_t offset) +{ + BNSetTypeBuilderOffset(m_object, offset); + return *this; +} + + Confidence<int64_t> TypeBuilder::GetStackAdjustment() const { BNOffsetWithConfidence result = BNGetTypeBuilderStackAdjustment(m_object); |
