__version__="9.2.103.dev0"importloggingfrom.blockimportBlockfrom.importstatementasStmtfrom.importexpressionasExprfrom.statementimportAssignmentfrom.expressionimportExpression,Const,Tmp,Register,UnaryOp,BinaryOpfrom.converter_commonimportConverterfrom.managerimportManagerfrom.block_walkerimportAILBlockWalker,AILBlockWalkerBaselog=logging.getLogger(__name__)available_converters:set[str]=set()try:from.converter_veximportVEXIRSBConverterimportpyvexavailable_converters.add("vex")exceptImportErrorase:log.debug("Could not import VEXIRSBConverter")log.debug(e)try:from.converter_pcodeimportPCodeIRSBConverterfromangr.enginesimportpcodeavailable_converters.add("pcode")exceptImportErrorase:log.debug("Could not import PCodeIRSBConverter")log.debug(e)
[docs]@staticmethoddefconvert(irsb,manager):# pylint:disable=arguments-differ""" Convert the given IRSB to an AIL block :param irsb: The IRSB to convert :param manager: The manager to use :return: Returns the converted block """if"pcode"inavailable_convertersandisinstance(irsb,pcode.lifter.IRSB):returnPCodeIRSBConverter.convert(irsb,manager)elif"vex"inavailable_convertersandisinstance(irsb,pyvex.IRSB):returnVEXIRSBConverter.convert(irsb,manager)else:raiseValueError("No converter available for %s"%type(irsb))