find . -type f -not \( -name f2 -o -name f5 \) -delete
должен это сделать.
-delete
аналогичен -exec rm -f '{}' +
, но короче и даже эффективнее. Сначала запустите его без него, чтобы убедиться, что он удаляет только те файлы, которые вы действительно хотите удалить.
Значение в next_eip
извлекается из стека:
ot = gen_pop_T0(s);
В качестве побочного -эффекта обновляется cpu_T0
, который затем используется для прыжка;см. реализациюgen_pop_T0
:
TCGMemOp d_ot = mo_pushpop(s, s->dflag);
gen_lea_v_seg(s, mo_stacksize(s), cpu_regs[R_ESP], R_SS, -1);
gen_op_ld_v(s, d_ot, cpu_T0, cpu_A0);
return d_ot;
Вот как RET
извлекает значение, которое было переданоCALL
:
tcg_gen_movi_tl(cpu_T0, next_eip);
gen_push_v(s, cpu_T0);
При интерпретации инструкции RET
эмулятор не может полагаться на внутренние знания :, он должен вести себя точно так же, как инструкция RET
, извлекая адрес возврата из стека. (В реальном -мировом коде существует много случаев, когда RET
следует за JMP
с ручным -установленным -вверх стеком, а не CALL
, или CALL
никогда не в результате получается RET
или код, изменяющий адрес возврата для RET
путем изменения значения в стеке. )Это то, что делает реализация QEMU RET
:она извлекает адрес возврата из стека(gen_pop_T0
)и обрабатывает его.