(self, cfg, start=None, call_depth=None, block_addrs=None)
:param cfg:         Control flow graph. Please make sure each node has an associated `state` with it, e.g. by
                            passing the keep_state=True and state_add_options=angr.options.refs arguments to CFGEmulated.
        :param start:       An address, Specifies where we start the generation of this data dependence graph.
        :param call_depth:  None or integers. A non-negative integer specifies how deep we would like to track in the
                            call tree. None disables call_depth limit.
        :param iterable or None block_addrs: A collection of block addresses that the DDG analysis should be performed
                                             on.
:param cfg:         Control flow graph. Please make sure each node has an associated `state` with it, e.g. by
                            passing the keep_state=True and state_add_options=angr.options.refs arguments to CFGEmulated.
        :param start:       An address, Specifies where we start the generation of this data dependence graph.
        :param call_depth:  None or integers. A non-negative integer specifies how deep we would like to track in the
                            call tree. None disables call_depth limit.
        :param iterable or None block_addrs: A collection of block addresses that the DDG analysis should be performed
                                             on.
: param cfg : Control flow graph . Please make sure each node has an associated state with it e . g . by passing the keep_state = True and state_add_options = angr . options . refs arguments to CFGEmulated . : param start : An address Specifies where we start the generation of this data dependence graph . : param call_depth : None or integers . A non - negative integer specifies how deep we would like to track in the call tree . None disables call_depth limit . : param iterable or None block_addrs : A collection of block addresses that the DDG analysis should be performed on .
def __init__(self, cfg, start=None, call_depth=None, block_addrs=None):
        """
        :param cfg:         Control flow graph. Please make sure each node has an associated `state` with it, e.g. by
                            passing the keep_state=True and state_add_options=angr.options.refs arguments to CFGEmulated.
        :param start:       An address, Specifies where we start the generation of this data dependence graph.
        :param call_depth:  None or integers. A non-negative integer specifies how deep we would like to track in the
                            call tree. None disables call_depth limit.
        :param iterable or None block_addrs: A collection of block addresses that the DDG analysis should be performed
                                             on.
        """

        # Sanity check
        if not cfg._keep_state:
            raise AngrDDGError('CFG must have "keep_state" set to True.')

        self._cfg = cfg
        self._start = self.project.entry if start is None else start
        self._call_depth = call_depth
        self._block_addrs = block_addrs

        # analysis output
        self._stmt_graph = networkx.DiGraph()
        self._data_graph = networkx.DiGraph()
        self._simplified_data_graph = None

        self._ast_graph = networkx.DiGraph()  # A mapping of ProgramVariable to ASTs

        self._symbolic_mem_ops = set()

        # Data dependency graph per function
        self._function_data_dependencies = None

        self.view = DDGView(self._cfg, self, simplified=False)
        self.simple_view = DDGView(self._cfg, self, simplified=True)

        # Local variables
        self._live_defs = None
        self._temp_variables = None
        self._temp_register_symbols = None
        self._temp_edges = None
        self._temp_register_symbols = None
        self._variables_per_statement = None
        self._custom_data_per_statement = None
        self._register_edges = None

        # Begin construction!
        self._construct()
def __init__ ( self , cfg , start = None , call_depth = None , block_addrs = None ) : # Sanity check if not cfg . _keep_state : raise AngrDDGError ( 'CFG must have "keep_state" set to True.' ) self . _cfg = cfg self . _start = self . project . entry if start is None else start self . _call_depth = call_depth self . _block_addrs = block_addrs # analysis output self . _stmt_graph = networkx . DiGraph ( ) self . _data_graph = networkx . DiGraph ( ) self . _simplified_data_graph = None self . _ast_graph = networkx . DiGraph ( ) # A mapping of ProgramVariable to ASTs self . _symbolic_mem_ops = set ( ) # Data dependency graph per function self . _function_data_dependencies = None self . view = DDGView ( self . _cfg , self , simplified = False ) self . simple_view = DDGView ( self . _cfg , self , simplified = True ) # Local variables self . _live_defs = None self . _temp_variables = None self . _temp_register_symbols = None self . _temp_edges = None self . _temp_register_symbols = None self . _variables_per_statement = None self . _custom_data_per_statement = None self . _register_edges = None # Begin construction! self . _construct ( )