(self, dst_addr, src_node, src_func_addr, to_outside=False, dst_func_addr=None,
                                      stmt_idx=None, ins_addr=None, is_exception=False)
Add a transition edge to the function transition map.

        :param int dst_addr: Address that the control flow transits to.
        :param CFGNode src_node: The source node that the control flow transits from.
        :param int src_func_addr: Function address.
        :return: True if the edge is correctly added. False if any exception occurred (for example, the target address
                 does not exist)
        :rtype: bool
Add a transition edge to the function transition map.
Add a transition edge to the function transition map .
def _function_add_transition_edge(self, dst_addr, src_node, src_func_addr, to_outside=False, dst_func_addr=None,
                                      stmt_idx=None, ins_addr=None, is_exception=False):
        """
        Add a transition edge to the function transition map.

        :param int dst_addr: Address that the control flow transits to.
        :param CFGNode src_node: The source node that the control flow transits from.
        :param int src_func_addr: Function address.
        :return: True if the edge is correctly added. False if any exception occurred (for example, the target address
                 does not exist)
        :rtype: bool
        """

        try:
            target_node = self._nodes.get(dst_addr, None)
            if target_node is None:
                target_snippet = self._to_snippet(addr=dst_addr, base_state=self._base_state)
            else:
                target_snippet = self._to_snippet(cfg_node=target_node)

            if src_node is None:
                # Add this basic block into the function manager
                self.kb.functions._add_node(src_func_addr, target_snippet)
            else:
                src_snippet = self._to_snippet(cfg_node=src_node)
                if not to_outside:
                    self.kb.functions._add_transition_to(src_func_addr, src_snippet, target_snippet, stmt_idx=stmt_idx,
                                                         ins_addr=ins_addr, is_exception=is_exception
                                                         )
                else:
                    self.kb.functions._add_outside_transition_to(src_func_addr, src_snippet, target_snippet,
                                                                 to_function_addr=dst_func_addr,
                                                                 stmt_idx=stmt_idx, ins_addr=ins_addr,
                                                                 is_exception=is_exception,
                                                                 )
            return True
        except (SimMemoryError, SimEngineError):
            return False
def _function_add_transition_edge ( self , dst_addr , src_node , src_func_addr , to_outside = False , dst_func_addr = None , stmt_idx = None , ins_addr = None , is_exception = False ) : try : target_node = self . _nodes . get ( dst_addr , None ) if target_node is None : target_snippet = self . _to_snippet ( addr = dst_addr , base_state = self . _base_state ) else : target_snippet = self . _to_snippet ( cfg_node = target_node ) if src_node is None : # Add this basic block into the function manager self . kb . functions . _add_node ( src_func_addr , target_snippet ) else : src_snippet = self . _to_snippet ( cfg_node = src_node ) if not to_outside : self . kb . functions . _add_transition_to ( src_func_addr , src_snippet , target_snippet , stmt_idx = stmt_idx , ins_addr = ins_addr , is_exception = is_exception ) else : self . kb . functions . _add_outside_transition_to ( src_func_addr , src_snippet , target_snippet , to_function_addr = dst_func_addr , stmt_idx = stmt_idx , ins_addr = ins_addr , is_exception = is_exception , ) return True except ( SimMemoryError , SimEngineError ) : return False