import logging import re from lego_util.exceptions import ( ClassOrNamespaceNotFoundInGhidraError, TypeNotFoundInGhidraError, MultipleTypesFoundInGhidraError, ) # Disable spurious warnings in vscode / pylance # pyright: reportMissingModuleSource=false from ghidra.program.model.data import PointerDataType from ghidra.program.model.data import DataTypeConflictHandler from ghidra.program.flatapi import FlatProgramAPI from ghidra.program.model.data import DataType from ghidra.program.model.symbol import Namespace def get_ghidra_type(api: FlatProgramAPI, type_name: str): """ Searches for the type named `typeName` in Ghidra. Raises: NotFoundInGhidraError: """ # references to pointers type_name = type_name.replace("&", " *") # handle reference spacing (void* -> void *) type_name = re.sub(r"(? Namespace: namespace = api.getCurrentProgram().getGlobalNamespace() for part in namespace_hierachy: namespace = api.getNamespace(namespace, part) if namespace is None: raise ClassOrNamespaceNotFoundInGhidraError(namespace_hierachy) return namespace