(self, loop_callback=None)
Loop detection.

        :param func loop_callback: A callback function for each detected loop backedge.
        :return: None
Loop detection.
Loop detection .
def _detect_loops(self, loop_callback=None):
        """
        Loop detection.

        :param func loop_callback: A callback function for each detected loop backedge.
        :return: None
        """

        loop_finder = self.project.analyses.LoopFinder(kb=self.kb, normalize=False, fail_fast=self._fail_fast)

        if loop_callback is not None:
            graph_copy = networkx.DiGraph(self._graph)

            for loop in loop_finder.loops:  # type: angr.analyses.loopfinder.Loop
                loop_callback(graph_copy, loop)

            self.model.graph = graph_copy

        # Update loop backedges and graph
        self._loop_back_edges = list(itertools.chain.from_iterable(loop.continue_edges for loop in loop_finder.loops))
def _detect_loops ( self , loop_callback = None ) : loop_finder = self . project . analyses . LoopFinder ( kb = self . kb , normalize = False , fail_fast = self . _fail_fast ) if loop_callback is not None : graph_copy = networkx . DiGraph ( self . _graph ) for loop in loop_finder . loops : # type: angr.analyses.loopfinder.Loop loop_callback ( graph_copy , loop ) self . model . graph = graph_copy # Update loop backedges and graph self . _loop_back_edges = list ( itertools . chain . from_iterable ( loop . continue_edges for loop in loop_finder . loops ) )