|
31 | 31 | ReferenceType, VariableSourceType, |
32 | 32 | TypeReferenceType, MemberAccess, MemberScope, TypeDefinitionLineType, |
33 | 33 | TokenEscapingType, |
34 | | - NameType, PointerSuffix, PointerBaseType |
| 34 | + NameType, PointerSuffix, PointerBaseType, |
| 35 | + Endianness |
35 | 36 | ) |
36 | 37 | from . import callingconvention |
37 | 38 | from . import function as _function |
@@ -655,6 +656,7 @@ def immutable_copy(self): |
655 | 656 | TypeClass.StructureTypeClass: StructureType, |
656 | 657 | TypeClass.EnumerationTypeClass: EnumerationType, |
657 | 658 | TypeClass.NamedTypeReferenceClass: NamedTypeReferenceType, |
| 659 | + TypeClass.FragmentTypeClass: FragmentType, |
658 | 660 | } |
659 | 661 | return Types[self.type_class](self._finalized, self.platform, self.confidence) |
660 | 662 |
|
@@ -1125,6 +1127,74 @@ def pointer_base_offset(self) -> int: |
1125 | 1127 | def pointer_base_offset(self, value: int): |
1126 | 1128 | self.set_pointer_base(self.pointer_base_type, value) |
1127 | 1129 |
|
| 1130 | +class FragmentBuilder(TypeBuilder): |
| 1131 | + @classmethod |
| 1132 | + def create( |
| 1133 | + cls, type: SomeType, width: int, |
| 1134 | + offset: int, endianness: Endianness = Endianness.LittleEndian, |
| 1135 | + confidence: int = core.max_confidence |
| 1136 | + ) -> 'FragmentBuilder': |
| 1137 | + ic = type.immutable_copy() |
| 1138 | + handle = core.BNCreateFragmentTypeBuilder(width, ic._to_core_struct(), offset, endianness) |
| 1139 | + assert handle is not None, "BNCreateFragmentTypeBuilder returned None" |
| 1140 | + return cls(handle, None, confidence) |
| 1141 | + |
| 1142 | + @property |
| 1143 | + def offset(self) -> int: |
| 1144 | + return core.BNGetTypeBuilderFragmentOriginalOffsetBytes(self._handle) |
| 1145 | + |
| 1146 | + @offset.setter |
| 1147 | + def offset(self, value: int): |
| 1148 | + core.BNSetTypeBuilderFragmentOriginalOffsetBytes(self._handle, value) |
| 1149 | + |
| 1150 | + @property |
| 1151 | + def fragment_original_width(self) -> int: |
| 1152 | + return core.BNGetTypeBuilderFragmentOriginalWidthBytes(self._handle) |
| 1153 | + |
| 1154 | + @fragment_original_width.setter |
| 1155 | + def fragment_original_width(self, value: int): |
| 1156 | + core.BNSetTypeBuilderFragmentOriginalWidthBytes(self._handle, value) |
| 1157 | + |
| 1158 | + @property |
| 1159 | + def fragment_start_bit(self) -> int: |
| 1160 | + return core.BNGetTypeBuilderFragmentStartBit(self._handle) |
| 1161 | + |
| 1162 | + @fragment_start_bit.setter |
| 1163 | + def fragment_start_bit(self, value: int): |
| 1164 | + core.BNSetTypeBuilderFragmentStartBit(self._handle, value) |
| 1165 | + |
| 1166 | + @property |
| 1167 | + def fragment_width_bits(self) -> int: |
| 1168 | + return core.BNGetTypeBuilderFragmentWidthBits(self._handle) |
| 1169 | + |
| 1170 | + @fragment_width_bits.setter |
| 1171 | + def fragment_width_bits(self, value: int): |
| 1172 | + core.BNSetTypeBuilderFragmentWidthBits(self._handle, value) |
| 1173 | + |
| 1174 | + @property |
| 1175 | + def fragment_truncated_start_bits(self) -> int: |
| 1176 | + return core.BNGetTypeBuilderFragmentTruncatedStartBits(self._handle) |
| 1177 | + |
| 1178 | + @fragment_truncated_start_bits.setter |
| 1179 | + def fragment_truncated_start_bits(self, value: int): |
| 1180 | + core.BNSetTypeBuilderFragmentTruncatedStartBits(self._handle, value) |
| 1181 | + |
| 1182 | + @property |
| 1183 | + def fragment_wrap_bit(self) -> int: |
| 1184 | + return core.BNGetTypeBuilderFragmentWrapBit(self._handle) |
| 1185 | + |
| 1186 | + @fragment_wrap_bit.setter |
| 1187 | + def fragment_wrap_bit(self, value: int): |
| 1188 | + core.BNSetTypeBuilderFragmentWrapBit(self._handle, value) |
| 1189 | + |
| 1190 | + @property |
| 1191 | + def endianness(self) -> Endianness: |
| 1192 | + return Endianness(core.BNGetTypeBuilderFragmentEndianness(self._handle)) |
| 1193 | + |
| 1194 | + @endianness.setter |
| 1195 | + def endianness(self, value: Endianness): |
| 1196 | + core.BNSetTypeBuilderFragmentEndianness(self._handle, value) |
| 1197 | + |
1128 | 1198 |
|
1129 | 1199 | class ArrayBuilder(TypeBuilder): |
1130 | 1200 | @classmethod |
@@ -2289,6 +2359,7 @@ def mutable_copy(self) -> 'TypeBuilder': |
2289 | 2359 | TypeClass.IntegerTypeClass: IntegerBuilder, TypeClass.FloatTypeClass: FloatBuilder, |
2290 | 2360 | TypeClass.PointerTypeClass: PointerBuilder, TypeClass.ArrayTypeClass: ArrayBuilder, |
2291 | 2361 | TypeClass.FunctionTypeClass: FunctionBuilder, TypeClass.WideCharTypeClass: WideCharBuilder, |
| 2362 | + TypeClass.FragmentTypeClass: FragmentBuilder, |
2292 | 2363 | # TypeClass.StructureTypeClass:Structure, |
2293 | 2364 | # TypeClass.EnumerationTypeClass:Enumeration, |
2294 | 2365 | # TypeClass.NamedTypeReferenceClass:NamedTypeReference, |
@@ -3484,13 +3555,43 @@ def create( |
3484 | 3555 | assert core_type is not None, "core.BNCreateWideCharType returned None" |
3485 | 3556 | return cls(core_type, platform, confidence) |
3486 | 3557 |
|
| 3558 | +class FragmentType(Type): |
| 3559 | + @property |
| 3560 | + def offset(self) -> int: |
| 3561 | + return core.BNGetTypeFragmentOriginalOffsetBytes(self._handle) |
| 3562 | + |
| 3563 | + @property |
| 3564 | + def fragment_original_width_bytes(self) -> int: |
| 3565 | + return core.BNGetTypeFragmentOriginalWidthBytes(self._handle) |
| 3566 | + |
| 3567 | + @property |
| 3568 | + def fragment_start_bit(self) -> int: |
| 3569 | + return core.BNGetTypeFragmentStartBit(self._handle) |
| 3570 | + |
| 3571 | + @property |
| 3572 | + def fragment_width_bits(self) -> int: |
| 3573 | + return core.BNGetTypeFragmentWidthBits(self._handle) |
| 3574 | + |
| 3575 | + @property |
| 3576 | + def fragment_truncated_start_bits(self) -> int: |
| 3577 | + return core.BNGetTypeFragmentTruncatedStartBits(self._handle) |
| 3578 | + |
| 3579 | + @property |
| 3580 | + def fragment_wrap_bit(self) -> int: |
| 3581 | + return core.BNGetTypeFragmentWrapBit(self._handle) |
| 3582 | + |
| 3583 | + @property |
| 3584 | + def fragment_endianness(self) -> Endianness: |
| 3585 | + return Endianness(core.BNGetTypeFragmentEndianness(self._handle)) |
| 3586 | + |
3487 | 3587 |
|
3488 | 3588 | Types = { |
3489 | 3589 | TypeClass.VoidTypeClass: VoidType, TypeClass.BoolTypeClass: BoolType, TypeClass.IntegerTypeClass: IntegerType, |
3490 | 3590 | TypeClass.FloatTypeClass: FloatType, TypeClass.StructureTypeClass: StructureType, |
3491 | 3591 | TypeClass.EnumerationTypeClass: EnumerationType, TypeClass.PointerTypeClass: PointerType, |
3492 | 3592 | TypeClass.ArrayTypeClass: ArrayType, TypeClass.FunctionTypeClass: FunctionType, |
3493 | 3593 | TypeClass.NamedTypeReferenceClass: NamedTypeReferenceType, TypeClass.WideCharTypeClass: WideCharType, |
| 3594 | + TypeClass.FragmentTypeClass: FragmentType, |
3494 | 3595 | } |
3495 | 3596 |
|
3496 | 3597 |
|
|
0 commit comments