(self, job, irsb, insn_addrs)
A block without successors should still be handled so it can be added to the function graph correctly.

        :param CFGJob job:  The current job that do not have any successor.
        :param IRSB irsb:   The related IRSB.
        :param insn_addrs:  A list of instruction addresses of this IRSB.
        :return: None
A block without successors should still be handled so it can be added to the function graph correctly.
A block without successors should still be handled so it can be added to the function graph correctly .
def _handle_job_without_successors(self, job, irsb, insn_addrs):
        """
        A block without successors should still be handled so it can be added to the function graph correctly.

        :param CFGJob job:  The current job that do not have any successor.
        :param IRSB irsb:   The related IRSB.
        :param insn_addrs:  A list of instruction addresses of this IRSB.
        :return: None
        """

        # it's not an empty block

        # handle all conditional exits
        ins_addr = job.addr
        for stmt_idx, stmt in enumerate(irsb.statements):
            if type(stmt) is pyvex.IRStmt.IMark:
                ins_addr = stmt.addr + stmt.delta
            elif type(stmt) is pyvex.IRStmt.Exit:
                successor_jumpkind = stmt.jk
                self._update_function_transition_graph(
                    job.block_id, None,
                    jumpkind = successor_jumpkind,
                    ins_addr=ins_addr,
                    stmt_idx=stmt_idx,
                )

        # handle the default exit
        successor_jumpkind = irsb.jumpkind
        successor_last_ins_addr = insn_addrs[-1]
        self._update_function_transition_graph(job.block_id, None,
                                               jumpkind=successor_jumpkind,
                                               ins_addr=successor_last_ins_addr,
                                               stmt_idx=DEFAULT_STATEMENT,
                                               )
def _handle_job_without_successors ( self , job , irsb , insn_addrs ) : # it's not an empty block # handle all conditional exits ins_addr = job . addr for stmt_idx , stmt in enumerate ( irsb . statements ) : if type ( stmt ) is pyvex . IRStmt . IMark : ins_addr = stmt . addr + stmt . delta elif type ( stmt ) is pyvex . IRStmt . Exit : successor_jumpkind = stmt . jk self . _update_function_transition_graph ( job . block_id , None , jumpkind = successor_jumpkind , ins_addr = ins_addr , stmt_idx = stmt_idx , ) # handle the default exit successor_jumpkind = irsb . jumpkind successor_last_ins_addr = insn_addrs [ - 1 ] self . _update_function_transition_graph ( job . block_id , None , jumpkind = successor_jumpkind , ins_addr = successor_last_ins_addr , stmt_idx = DEFAULT_STATEMENT , )