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