(self, node, state)
return True, state
:param angr.Block node:
        :param VariableRecoveryState state:
        :return:
def _run_on_node(self, node, state):
        """


        :param angr.Block node:
        :param VariableRecoveryState state:
        :return:
        """

        if type(node) is ailment.Block:
            # AIL mode
            block = node
        else:
            # VEX mode, get the block again
            block = self.project.factory.block(node.addr, node.size, opt_level=1, cross_insn_opt=False)

        # if node.addr in self._instates:
        #     prev_state: VariableRecoveryFastState = self._instates[node.addr]
        #     if input_state == prev_state:
        #         l.debug('Skip node %#x as we have reached a fixed-point', node.addr)
        #         return False, input_state
        #     else:
        #         l.debug('Merging input state of node %#x with the previous state.', node.addr)
        #         input_state, _ = prev_state.merge((input_state,), successor=node.addr)

        state = state.copy()
        state.block_addr = node.addr
        # self._instates[node.addr] = state

        if self._node_iterations[node.addr] >= self._max_iterations:
            l.debug('Skip node %#x as we have iterated %d times on it.', node.addr, self._node_iterations[node.addr])
            return False, state

        self._process_block(state, block)

        self._node_iterations[node.addr] += 1
        self.type_constraints |= state.type_constraints
        self.var_to_typevar.update(state.typevars._typevars)

        state.downsize()
        self._outstates[node.addr] = state

        return True, state
def _run_on_node ( self , node , state ) : if type ( node ) is ailment . Block : # AIL mode block = node else : # VEX mode, get the block again block = self . project . factory . block ( node . addr , node . size , opt_level = 1 , cross_insn_opt = False ) # if node.addr in self._instates: #     prev_state: VariableRecoveryFastState = self._instates[node.addr] #     if input_state == prev_state: #         l.debug('Skip node %#x as we have reached a fixed-point', node.addr) #         return False, input_state #     else: #         l.debug('Merging input state of node %#x with the previous state.', node.addr) #         input_state, _ = prev_state.merge((input_state,), successor=node.addr) state = state . copy ( ) state . block_addr = node . addr # self._instates[node.addr] = state if self . _node_iterations [ node . addr ] >= self . _max_iterations : l . debug ( 'Skip node %#x as we have iterated %d times on it.' , node . addr , self . _node_iterations [ node . addr ] ) return False , state self . _process_block ( state , block ) self . _node_iterations [ node . addr ] += 1 self . type_constraints |= state . type_constraints self . var_to_typevar . update ( state . typevars . _typevars ) state . downsize ( ) self . _outstates [ node . addr ] = state return True , state