(self, jump)
Called when we cannot resolve an indirect jump.

        :param IndirectJump jump: The unresolved indirect jump.

        :return:    None
Called when we cannot resolve an indirect jump.
Called when we cannot resolve an indirect jump .
def _indirect_jump_unresolved(self, jump):
        """
        Called when we cannot resolve an indirect jump.

        :param IndirectJump jump: The unresolved indirect jump.

        :return:    None
        """

        # add a node from this node to UnresolvableJumpTarget or UnresolvalbeCallTarget node,
        # depending on its jump kind
        src_node = self._nodes[jump.addr]
        if jump.jumpkind == 'Ijk_Boring':
            unresolvable_target_addr = self._unresolvable_jump_target_addr
            simprocedure_name = 'UnresolvableJumpTarget'
        elif jump.jumpkind == 'Ijk_Call':
            unresolvable_target_addr = self._unresolvable_call_target_addr
            simprocedure_name = 'UnresolvableCallTarget'
        else:
            raise AngrCFGError('It should be impossible')

        dst_node = CFGNode(unresolvable_target_addr, 0, self.model,
                           function_address=unresolvable_target_addr,
                           simprocedure_name=simprocedure_name,
                           block_id=unresolvable_target_addr,
                           )

        # add the dst_node to self._nodes
        if unresolvable_target_addr not in self._nodes:
            self.model.add_node(unresolvable_target_addr, dst_node)

        self._graph_add_edge(dst_node, src_node, jump.jumpkind, jump.ins_addr, jump.stmt_idx)
        # mark it as a jumpout site for that function
        self._function_add_transition_edge(unresolvable_target_addr, src_node, jump.func_addr,
                                           to_outside=True,
                                           dst_func_addr=unresolvable_target_addr,
                                           ins_addr=jump.ins_addr,
                                           stmt_idx=jump.stmt_idx,
                                           )

        self._deregister_analysis_job(jump.func_addr, jump)

        CFGBase._indirect_jump_unresolved(self, jump)
def _indirect_jump_unresolved ( self , jump ) : # add a node from this node to UnresolvableJumpTarget or UnresolvalbeCallTarget node, # depending on its jump kind src_node = self . _nodes [ jump . addr ] if jump . jumpkind == 'Ijk_Boring' : unresolvable_target_addr = self . _unresolvable_jump_target_addr simprocedure_name = 'UnresolvableJumpTarget' elif jump . jumpkind == 'Ijk_Call' : unresolvable_target_addr = self . _unresolvable_call_target_addr simprocedure_name = 'UnresolvableCallTarget' else : raise AngrCFGError ( 'It should be impossible' ) dst_node = CFGNode ( unresolvable_target_addr , 0 , self . model , function_address = unresolvable_target_addr , simprocedure_name = simprocedure_name , block_id = unresolvable_target_addr , ) # add the dst_node to self._nodes if unresolvable_target_addr not in self . _nodes : self . model . add_node ( unresolvable_target_addr , dst_node ) self . _graph_add_edge ( dst_node , src_node , jump . jumpkind , jump . ins_addr , jump . stmt_idx ) # mark it as a jumpout site for that function self . _function_add_transition_edge ( unresolvable_target_addr , src_node , jump . func_addr , to_outside = True , dst_func_addr = unresolvable_target_addr , ins_addr = jump . ins_addr , stmt_idx = jump . stmt_idx , ) self . _deregister_analysis_job ( jump . func_addr , jump ) CFGBase . _indirect_jump_unresolved ( self , jump )