(self)
return job
Retrieve a pending job.

        :return: A CFGJob instance or None
Retrieve a pending job.
Retrieve a pending job .
def _get_one_pending_job(self):
        """
        Retrieve a pending job.

        :return: A CFGJob instance or None
        """

        pending_job_key = next(iter(self._pending_jobs.keys()))
        pending_job = self._pending_jobs[pending_job_key].pop()
        if len(self._pending_jobs[pending_job_key]) == 0:
            del self._pending_jobs[pending_job_key]

        pending_job_state = pending_job.state
        pending_job_call_stack = pending_job.call_stack
        pending_job_src_block_id = pending_job.src_block_id
        pending_job_src_exit_stmt_idx = pending_job.src_exit_stmt_idx

        self._deregister_analysis_job(pending_job.caller_func_addr, pending_job)

        # Let's check whether this address has been traced before.
        if pending_job_key in self._nodes:
            node = self._nodes[pending_job_key]
            if node in self.graph:
                pending_exit_addr = self._block_id_addr(pending_job_key)
                # That block has been traced before. Let's forget about it
                l.debug("Target 0x%08x has been traced before. Trying the next one...", pending_exit_addr)

                # However, we should still create the FakeRet edge
                self._graph_add_edge(pending_job_src_block_id, pending_job_key, jumpkind="Ijk_FakeRet",
                                     stmt_idx=pending_job_src_exit_stmt_idx, ins_addr=pending_job.src_exit_ins_addr)

                return None

        pending_job_state.history.jumpkind = 'Ijk_FakeRet'

        job = CFGJob(pending_job_state.addr,
                     pending_job_state,
                     self._context_sensitivity_level,
                     src_block_id=pending_job_src_block_id,
                     src_exit_stmt_idx=pending_job_src_exit_stmt_idx,
                     src_ins_addr=pending_job.src_exit_ins_addr,
                     call_stack=pending_job_call_stack,
        )
        l.debug("Tracing a missing return exit %s", self._block_id_repr(pending_job_key))

        return job
def _get_one_pending_job ( self ) : pending_job_key = next ( iter ( self . _pending_jobs . keys ( ) ) ) pending_job = self . _pending_jobs [ pending_job_key ] . pop ( ) if len ( self . _pending_jobs [ pending_job_key ] ) == 0 : del self . _pending_jobs [ pending_job_key ] pending_job_state = pending_job . state pending_job_call_stack = pending_job . call_stack pending_job_src_block_id = pending_job . src_block_id pending_job_src_exit_stmt_idx = pending_job . src_exit_stmt_idx self . _deregister_analysis_job ( pending_job . caller_func_addr , pending_job ) # Let's check whether this address has been traced before. if pending_job_key in self . _nodes : node = self . _nodes [ pending_job_key ] if node in self . graph : pending_exit_addr = self . _block_id_addr ( pending_job_key ) # That block has been traced before. Let's forget about it l . debug ( "Target 0x%08x has been traced before. Trying the next one..." , pending_exit_addr ) # However, we should still create the FakeRet edge self . _graph_add_edge ( pending_job_src_block_id , pending_job_key , jumpkind = "Ijk_FakeRet" , stmt_idx = pending_job_src_exit_stmt_idx , ins_addr = pending_job . src_exit_ins_addr ) return None pending_job_state . history . jumpkind = 'Ijk_FakeRet' job = CFGJob ( pending_job_state . addr , pending_job_state , self . _context_sensitivity_level , src_block_id = pending_job_src_block_id , src_exit_stmt_idx = pending_job_src_exit_stmt_idx , src_ins_addr = pending_job . src_exit_ins_addr , call_stack = pending_job_call_stack , ) l . debug ( "Tracing a missing return exit %s" , self . _block_id_repr ( pending_job_key ) ) return job