From b1246d8bfc27368028c3f9f93d022e373118fcaa Mon Sep 17 00:00:00 2001 From: Ryan Snyder Date: Thu, 20 Nov 2025 21:40:23 -0500 Subject: types: fragment type API support (C++, Python) --- type.cpp | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) (limited to 'type.cpp') 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 Type::GetStackAdjustment() const { BNOffsetWithConfidence result = BNGetTypeStackAdjustment(m_object); @@ -991,6 +1033,31 @@ Ref Type::PointerType(size_t width, const Confidence>& type, con } +Ref Type::FragmentType(size_t width, const Confidence>& 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::FragmentType(size_t width, const Confidence>& 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::ArrayType(const Confidence>& type, uint64_t elem) { BNTypeWithConfidence typeConf; @@ -1985,6 +2052,31 @@ TypeBuilder TypeBuilder::PointerType(size_t width, const Confidence>& } +TypeBuilder TypeBuilder::FragmentType(size_t width, const Confidence>& 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>& 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>& 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 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); -- cgit v1.3.1