Я никогда не использовал emu8086, но, посмотрев его скриншот и судя по его названию, он, вероятно, эмулятор - это означает, что он не выполняет код по умолчанию.
Каждая инструкция меняетсясостояние виртуального процессора 8086 (представленного в виде структуры данных в памяти), а не состояние вашего реального процессора.
С этой эмуляцией emu8086 не нужно полагаться на флаг TF
, чтобы выполнить одношаговое выполнениеПрограмма, она просто должна остановиться после одного шага эмуляции и ждать, пока вы нажмете другую кнопку.
Это также, почему вы можете найти такую вещь, как «Шаг назад».
Если вам интересно, что произойдет, если отлаженная программа (а не эмулируемая) установит флаг TF
, тогда ответ таков: это зависит от отладчика.
Правильное поведениеэто тот, где отладчик получает исключения, но это трудно обрабатывать правильно (так как сам отладчик использует флаг TF
).
Некоторому отладчику просто наплевать и проглотить исключение (то есть они не пересылаютдля отлаживаемой программы) при условии, что хорошо написанная программа не нуждается в использовании флага TF
.
К сожалению, вредоносные программы обычно используют набор методов защиты от отладки, включая установку TF
и проверку ее обратно /ожидание исключений для обнаружения присутствия отладчика.
По-настоящему прозрачный отладчик должен тщательно обрабатывать регистр RFLAGS
.
При отладке с точками останова TF не устанавливается во время выполнения программы, поэтому беспокоиться не о чем.Однако, когда TF устанавливается на один шаг во время следующей инструкции, это проблематично во время pushfd/q
, и отладчик должен явно обрабатывать этот случай, чтобы избежать обнаружения.Если отладчик устанавливает TF, отладчик должен передать в программу исключение отладки - под текущей ОС TF не будет длиться дольше, чем инструкция, потому что ОС поймает исключение, передаст его в сигнал и отправит его программе, покаочистка TF.Таким образом, отладчик может просто выполнить проверку, прежде чем перейти к инструкции popfd/q
.
Если TF не очищается ОС, отладчик должен эффективно эмулировать RFLAGS
с копией.