summaryrefslogtreecommitdiff
path: root/type.cpp
diff options
context:
space:
mode:
authorRyan Snyder <ryan@vector35.com>2025-11-20 21:40:23 -0500
committerRyan Snyder <ryan@vector35.com>2026-04-13 12:52:07 -0400
commitb1246d8bfc27368028c3f9f93d022e373118fcaa (patch)
treec3b9ac2ce7472c95f7e62ebfd77700416cbc632f /type.cpp
parent745c0b3b806b7e44aba36cf3a8564dfa0631dc8f (diff)
types: fragment type API support (C++, Python)
Diffstat (limited to 'type.cpp')
-rw-r--r--type.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/type.cpp b/type.cpp
index 817e0934..5aa679a1 100644
--- a/type.cpp
+++ b/type.cpp
@@ -716,6 +716,48 @@ int64_t Type::GetPointerBaseOffset() const
}
+uint64_t Type::GetFragmentOriginalOffsetBytes() const
+{
+ return BNGetTypeFragmentOriginalOffsetBytes(m_object);
+}
+
+
+size_t Type::GetFragmentOriginalWidthBytes() const
+{
+ return BNGetTypeFragmentOriginalWidthBytes(m_object);
+}
+
+
+size_t Type::GetFragmentStartBit() const
+{
+ return BNGetTypeFragmentStartBit(m_object);
+}
+
+
+size_t Type::GetFragmentWidthBits() const
+{
+ return BNGetTypeFragmentWidthBits(m_object);
+}
+
+
+size_t Type::GetFragmentTruncatedStartBits() const
+{
+ return BNGetTypeFragmentTruncatedStartBits(m_object);
+}
+
+
+size_t Type::GetFragmentWrapBit() const
+{
+ return BNGetTypeFragmentWrapBit(m_object);
+}
+
+
+BNEndianness Type::GetFragmentEndianness() const
+{
+ return BNGetTypeFragmentEndianness(m_object);
+}
+
+
Confidence<int64_t> Type::GetStackAdjustment() const
{
BNOffsetWithConfidence result = BNGetTypeStackAdjustment(m_object);
@@ -991,6 +1033,31 @@ Ref<Type> Type::PointerType(size_t width, const Confidence<Ref<Type>>& type, con
}
+Ref<Type> Type::FragmentType(size_t width, const Confidence<Ref<Type>>& type,
+ uint64_t offset, BNEndianness endianness)
+{
+ BNTypeWithConfidence typeConf;
+ typeConf.type = type->GetObject();
+ typeConf.confidence = type.GetConfidence();
+
+ return new Type(BNCreateFragmentType(width, &typeConf, offset, endianness));
+}
+
+
+Ref<Type> Type::FragmentType(size_t width, const Confidence<Ref<Type>>& type,
+ uint64_t originalFragmentOffsetBytes, size_t originalFragmentWidthBytes, BNEndianness endianness,
+ size_t fragmentStartBit, size_t fragmentWidthBits, size_t fragmentTruncatedStartBits, size_t wrapBit)
+{
+ BNTypeWithConfidence typeConf;
+ typeConf.type = type->GetObject();
+ typeConf.confidence = type.GetConfidence();
+
+ return new Type(BNCreateFragmentTypeBits(width, &typeConf,
+ originalFragmentOffsetBytes, originalFragmentWidthBytes, endianness,
+ fragmentStartBit, fragmentWidthBits, fragmentTruncatedStartBits, wrapBit));
+}
+
+
Ref<Type> Type::ArrayType(const Confidence<Ref<Type>>& type, uint64_t elem)
{
BNTypeWithConfidence typeConf;
@@ -1985,6 +2052,31 @@ TypeBuilder TypeBuilder::PointerType(size_t width, const Confidence<Ref<Type>>&
}
+TypeBuilder TypeBuilder::FragmentType(size_t width, const Confidence<Ref<Type>>& type,
+ uint64_t offset, BNEndianness endianness)
+{
+ BNTypeWithConfidence typeConf;
+ typeConf.type = type->GetObject();
+ typeConf.confidence = type.GetConfidence();
+
+ return TypeBuilder(BNCreateFragmentTypeBuilder(width, &typeConf, offset, endianness));
+}
+
+
+TypeBuilder TypeBuilder::FragmentType(size_t width, const Confidence<Ref<Type>>& type,
+ uint64_t originalFragmentOffsetBytes, size_t originalFragmentWidthBytes, BNEndianness endianness,
+ size_t fragmentStartBit, size_t fragmentWidthBits, size_t fragmentTruncatedStartBits, size_t wrapBit)
+{
+ BNTypeWithConfidence typeConf;
+ typeConf.type = type->GetObject();
+ typeConf.confidence = type.GetConfidence();
+
+ return TypeBuilder(BNCreateFragmentTypeBuilderBits(width, &typeConf,
+ originalFragmentOffsetBytes, originalFragmentWidthBytes, endianness,
+ fragmentStartBit, fragmentWidthBits, fragmentTruncatedStartBits, wrapBit));
+}
+
+
TypeBuilder TypeBuilder::ArrayType(const Confidence<Ref<Type>>& type, uint64_t elem)
{
BNTypeWithConfidence typeConf;
@@ -2180,6 +2272,55 @@ TypeBuilder& TypeBuilder::SetPointerBase(BNPointerBaseType baseType, int64_t bas
}
+TypeBuilder& TypeBuilder::SetFragmentOriginalOffsetBytes(uint64_t offset)
+{
+ BNSetTypeBuilderFragmentOriginalOffsetBytes(m_object, offset);
+ return *this;
+}
+
+
+TypeBuilder& TypeBuilder::SetFragmentOriginalWidthBytes(size_t width)
+{
+ BNSetTypeBuilderFragmentOriginalWidthBytes(m_object, width);
+ return *this;
+}
+
+
+TypeBuilder& TypeBuilder::SetFragmentStartBit(size_t startBit)
+{
+ BNSetTypeBuilderFragmentStartBit(m_object, startBit);
+ return *this;
+}
+
+
+TypeBuilder& TypeBuilder::SetFragmentWidthBits(size_t widthBits)
+{
+ BNSetTypeBuilderFragmentWidthBits(m_object, widthBits);
+ return *this;
+}
+
+
+TypeBuilder& TypeBuilder::SetFragmentTruncatedStartBits(size_t truncatedBits)
+{
+ BNSetTypeBuilderFragmentTruncatedStartBits(m_object, truncatedBits);
+ return *this;
+}
+
+
+TypeBuilder& TypeBuilder::SetFragmentWrapBit(size_t wrapBit)
+{
+ BNSetTypeBuilderFragmentWrapBit(m_object, wrapBit);
+ return *this;
+}
+
+
+TypeBuilder& TypeBuilder::SetFragmentEndianness(BNEndianness endianness)
+{
+ BNSetTypeBuilderFragmentEndianness(m_object, endianness);
+ return *this;
+}
+
+
std::set<BNPointerSuffix> TypeBuilder::GetPointerSuffix() const
{
size_t count = 0;
@@ -2335,6 +2476,48 @@ int64_t TypeBuilder::GetPointerBaseOffset() const
}
+uint64_t TypeBuilder::GetFragmentOriginalOffsetBytes() const
+{
+ return BNGetTypeBuilderFragmentOriginalOffsetBytes(m_object);
+}
+
+
+size_t TypeBuilder::GetFragmentOriginalWidthBytes() const
+{
+ return BNGetTypeBuilderFragmentOriginalWidthBytes(m_object);
+}
+
+
+size_t TypeBuilder::GetFragmentStartBit() const
+{
+ return BNGetTypeBuilderFragmentStartBit(m_object);
+}
+
+
+size_t TypeBuilder::GetFragmentWidthBits() const
+{
+ return BNGetTypeBuilderFragmentWidthBits(m_object);
+}
+
+
+size_t TypeBuilder::GetFragmentTruncatedStartBits() const
+{
+ return BNGetTypeBuilderFragmentTruncatedStartBits(m_object);
+}
+
+
+size_t TypeBuilder::GetFragmentWrapBit() const
+{
+ return BNGetTypeBuilderFragmentWrapBit(m_object);
+}
+
+
+BNEndianness TypeBuilder::GetFragmentEndianness() const
+{
+ return BNGetTypeBuilderFragmentEndianness(m_object);
+}
+
+
QualifiedName TypeBuilder::GetStructureName() const
{
BNQualifiedName name = BNTypeBuilderGetStructureName(m_object);