summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h2
-rw-r--r--python/types.py49
-rw-r--r--type.cpp14
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:
diff --git a/type.cpp b/type.cpp
index d563ce29..3b00a3c9 100644
--- a/type.cpp
+++ b/type.cpp
@@ -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);