def basic_block(self): """Basic block associated with this part of the flow graph""" block = core.BNGetFlowGraphBasicBlock(self.handle) if not block: return None func_handle = core.BNGetBasicBlockFunction(block) if not func_handle: core.BNFreeBasicBlock(block) return None view = binaryview.BinaryView( handle=core.BNGetFunctionData(func_handle)) func = function.Function(view, func_handle) if core.BNIsLowLevelILBasicBlock(block): block = lowlevelil.LowLevelILBasicBlock( view, block, lowlevelil.LowLevelILFunction( func.arch, core.BNGetBasicBlockLowLevelILFunction(block), func)) elif core.BNIsMediumLevelILBasicBlock(block): block = mediumlevelil.MediumLevelILBasicBlock( view, block, mediumlevelil.MediumLevelILFunction( func.arch, core.BNGetBasicBlockMediumLevelILFunction(block), func)) else: block = basicblock.BasicBlock(block, view) return block
def function(self): """Function for a flow graph""" func = core.BNGetFunctionForFlowGraph(self.handle) if func is None: return None return function.Function( binaryview.BinaryView(handle=core.BNGetFunctionData(func)), func)
def _set_current_function(self, ctxt, func): try: if func: func = binaryninja.function.Function( binaryninja.binaryview.BinaryView( handle=core.BNGetFunctionData(func)), core.BNNewFunctionReference(func)) else: func = None self.perform_set_current_function(func) except: log.log_error(traceback.format_exc())
def _get_incoming_flag_value(self, ctxt, reg, func, result): try: func_obj = binaryninja.function.Function( binaryninja.binaryview.BinaryView( handle=core.BNGetFunctionData(func)), core.BNNewFunctionReference(func)) reg_name = self.arch.get_reg_name(reg) api_obj = self.perform_get_incoming_flag_value( reg_name, func_obj)._to_api_object() except: log.log_error(traceback.format_exc()) api_obj = binaryninja.function.RegisterValue()._to_api_object() result[0].state = api_obj.state result[0].value = api_obj.value
def _set_current_basic_block(self, ctxt, block): try: if block: func = core.BNGetBasicBlockFunction(block) if func is None: block = None else: block = binaryninja.basicblock.BasicBlock(core.BNNewBasicBlockReference(block), binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(func))) core.BNFreeFunction(func) else: block = None self.perform_set_current_basic_block(block) except: log.log_error(traceback.format_exc())
def _get_parameter_var_for_incoming_var(self, ctxt, in_var, func, result): try: if func is None: func_obj = None else: func_obj = binaryninja.function.Function( binaryninja.binaryview.BinaryView( handle=core.BNGetFunctionData(func)), core.BNNewFunctionReference(func)) in_var_obj = binaryninja.function.Variable(func_obj, in_var[0].type, in_var[0].index, in_var[0].storage) out_var = self.perform_get_parameter_var_for_incoming_var( in_var_obj, func_obj) result[0].type = out_var.source_type result[0].index = out_var.index result[0].storage = out_var.storage except: log.log_error(traceback.format_exc()) result[0].type = in_var[0].type result[0].index = in_var[0].index result[0].storage = in_var[0].storage