From 6436615567547349434351468012512505109552 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Mon, 6 Nov 2023 15:28:59 -0500 Subject: Type Browser --- python/binaryview.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'python/binaryview.py') diff --git a/python/binaryview.py b/python/binaryview.py index d7d2a2a8..de434074 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -4979,6 +4979,80 @@ class BinaryView: finally: core.BNFreeTypeFieldReferenceTypes(refs, count.value) + def get_outgoing_direct_type_references(self, name: '_types.QualifiedNameType') -> List['_types.QualifiedName']: + qname = _types.QualifiedName(name) + _qname = qname._to_core_struct() + count = ctypes.c_ulonglong(0) + _result = core.BNGetOutgoingDirectTypeReferences(self.handle, _qname, count) + assert _result is not None, "core.BNGetOutgoingDirectTypeReferences returned None" + try: + result = [] + for i in range(0, count.value): + result_name = _types.QualifiedName._from_core_struct(_result[i]) + result.append(result_name) + return result + finally: + core.BNFreeTypeNameList(_result, count.value) + + def get_outgoing_recursive_type_references(self, names: Union['_types.QualifiedNameType', List['_types.QualifiedNameType']]) -> List['_types.QualifiedName']: + qnames = [] + if isinstance(names, list): + for name in names: + qnames.append(_types.QualifiedName(name)) + else: + qnames.append(_types.QualifiedName(names)) + _qnames = (core.BNQualifiedName * len(qnames))() + for i, qname in enumerate(qnames): + _qnames[i] = qname._to_core_struct() + count = ctypes.c_ulonglong(0) + _result = core.BNGetOutgoingRecursiveTypeReferences(self.handle, _qnames, len(qnames), count) + assert _result is not None, "core.BNGetOutgoingRecursiveTypeReferences returned None" + try: + result = [] + for i in range(0, count.value): + result_name = _types.QualifiedName._from_core_struct(_result[i]) + result.append(result_name) + return result + finally: + core.BNFreeTypeNameList(_result, count.value) + + def get_incoming_direct_type_references(self, name: '_types.QualifiedNameType') -> List['_types.QualifiedName']: + qname = _types.QualifiedName(name) + _qname = qname._to_core_struct() + count = ctypes.c_ulonglong(0) + _result = core.BNGetIncomingDirectTypeReferences(self.handle, _qname, count) + assert _result is not None, "core.BNGetIncomingDirectTypeReferences returned None" + try: + result = [] + for i in range(0, count.value): + result_name = _types.QualifiedName._from_core_struct(_result[i]) + result.append(result_name) + return result + finally: + core.BNFreeTypeNameList(_result, count.value) + + def get_incoming_recursive_type_references(self, names: Union['_types.QualifiedNameType', List['_types.QualifiedNameType']]) -> List['_types.QualifiedName']: + qnames = [] + if isinstance(names, list): + for name in names: + qnames.append(_types.QualifiedName(name)) + else: + qnames.append(_types.QualifiedName(names)) + _qnames = (core.BNQualifiedName * len(qnames))() + for i, qname in enumerate(qnames): + _qnames[i] = qname._to_core_struct() + count = ctypes.c_ulonglong(0) + _result = core.BNGetIncomingRecursiveTypeReferences(self.handle, _qnames, len(qnames), count) + assert _result is not None, "core.BNGetIncomingRecursiveTypeReferences returned None" + try: + result = [] + for i in range(0, count.value): + result_name = _types.QualifiedName._from_core_struct(_result[i]) + result.append(result_name) + return result + finally: + core.BNFreeTypeNameList(_result, count.value) + def create_structure_from_offset_access(self, name: '_types.QualifiedName') -> '_types.StructureType': newMemberAdded = ctypes.c_bool(False) _name = _types.QualifiedName(name)._to_core_struct() -- cgit v1.3.1