(self, state, *args, **kwargs)
return self.successors
Perform execution with a state.

        You should only override this method in a subclass in order to provide the correct method signature and
        docstring. You should override the ``_process`` method to do your actual execution.

        :param state:       The state with which to execute. This state will be copied before
                            modification.
        :param inline:      This is an inline execution. Do not bother copying the state.
        :param force_addr:  Force execution to pretend that we're working at this concrete address
        :returns:           A SimSuccessors object categorizing the execution's successor states
Perform execution with a state.
Perform execution with a state .
def process(self, state, *args, **kwargs):
        """
        Perform execution with a state.

        You should only override this method in a subclass in order to provide the correct method signature and
        docstring. You should override the ``_process`` method to do your actual execution.

        :param state:       The state with which to execute. This state will be copied before
                            modification.
        :param inline:      This is an inline execution. Do not bother copying the state.
        :param force_addr:  Force execution to pretend that we're working at this concrete address
        :returns:           A SimSuccessors object categorizing the execution's successor states
        """
        inline = kwargs.pop('inline', False)
        force_addr = kwargs.pop('force_addr', None)

        ip = state._ip
        addr = (ip if isinstance(ip, SootAddressDescriptor) else state.solver.eval(ip)) \
            if force_addr is None else force_addr

        # make a copy of the initial state for actual processing, if needed
        if not inline and o.COPY_STATES in state.options:
            new_state = state.copy()
        else:
            new_state = state
        # enforce this distinction
        old_state = state
        del state
        self.state = new_state

        # we have now officially begun the stepping process! now is where we "cycle" a state's
        # data - move the "present" into the "past" by pushing an entry on the history stack.
        # nuance: make sure to copy from the PREVIOUS state to the CURRENT one
        # to avoid creating a dead link in the history, messing up the statehierarchy
        new_state.register_plugin('history', old_state.history.make_child())
        new_state.history.recent_bbl_addrs.append(addr)
        if new_state.arch.unicorn_support:
            new_state.scratch.executed_pages_set = {addr & ~0xFFF}

        self.successors = SimSuccessors(addr, old_state)

        new_state._inspect('engine_process', when=BP_BEFORE, sim_engine=self, sim_successors=self.successors, address=addr)
        self.successors = new_state._inspect_getattr('sim_successors', self.successors)
        try:
            self.process_successors(self.successors, **kwargs)
        except SimException:
            if o.EXCEPTION_HANDLING not in old_state.options:
                raise
            old_state.project.simos.handle_exception(self, *sys.exc_info())

        new_state._inspect('engine_process', when=BP_AFTER, sim_successors=self.successors, address=addr)
        self.successors = new_state._inspect_getattr('sim_successors', self.successors)

        # downsizing
        if new_state.supports_inspect:
            new_state.inspect.downsize()
        # if not TRACK, clear actions on OLD state
        #if o.TRACK_ACTION_HISTORY not in old_state.options:
        #    old_state.history.recent_events = []

        # fix up the descriptions...
        description = str(self.successors)
        l.info("Ticked state: %s", description)
        for succ in self.successors.all_successors:
            succ.history.recent_description = description
        for succ in self.successors.flat_successors:
            succ.history.recent_description = description

        return self.successors
def process ( self , state , * args , * * kwargs ) : inline = kwargs . pop ( 'inline' , False ) force_addr = kwargs . pop ( 'force_addr' , None ) ip = state . _ip addr = ( ip if isinstance ( ip , SootAddressDescriptor ) else state . solver . eval ( ip ) ) if force_addr is None else force_addr # make a copy of the initial state for actual processing, if needed if not inline and o . COPY_STATES in state . options : new_state = state . copy ( ) else : new_state = state # enforce this distinction old_state = state del state self . state = new_state # we have now officially begun the stepping process! now is where we "cycle" a state's # data - move the "present" into the "past" by pushing an entry on the history stack. # nuance: make sure to copy from the PREVIOUS state to the CURRENT one # to avoid creating a dead link in the history, messing up the statehierarchy new_state . register_plugin ( 'history' , old_state . history . make_child ( ) ) new_state . history . recent_bbl_addrs . append ( addr ) if new_state . arch . unicorn_support : new_state . scratch . executed_pages_set = { addr & ~ 0xFFF } self . successors = SimSuccessors ( addr , old_state ) new_state . _inspect ( 'engine_process' , when = BP_BEFORE , sim_engine = self , sim_successors = self . successors , address = addr ) self . successors = new_state . _inspect_getattr ( 'sim_successors' , self . successors ) try : self . process_successors ( self . successors , * * kwargs ) except SimException : if o . EXCEPTION_HANDLING not in old_state . options : raise old_state . project . simos . handle_exception ( self , * sys . exc_info ( ) ) new_state . _inspect ( 'engine_process' , when = BP_AFTER , sim_successors = self . successors , address = addr ) self . successors = new_state . _inspect_getattr ( 'sim_successors' , self . successors ) # downsizing if new_state . supports_inspect : new_state . inspect . downsize ( ) # if not TRACK, clear actions on OLD state #if o.TRACK_ACTION_HISTORY not in old_state.options: #    old_state.history.recent_events = [] # fix up the descriptions... description = str ( self . successors ) l . info ( "Ticked state: %s" , description ) for succ in self . successors . all_successors : succ . history . recent_description = description for succ in self . successors . flat_successors : succ . history . recent_description = description return self . successors