Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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())
Ejemplo n.º 4
0
 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())
Ejemplo n.º 6
0
 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