Что произойдет, если TF (флаг прерывания) установлен в 0 в 8086 микропроцессорах? - PullRequest
0 голосов
/ 21 октября 2018

Здесь я искал, что:

Trap Flag (T) - Этот флаг используется для отладки на кристалле.Установка флага прерывания переводит микропроцессор в одношаговый режим для отладки.При пошаговом выполнении микропроцессор выполняет инструкцию и вводит одностадийный ISR.
Если установлен флаг прерывания (1), ЦП автоматически генерирует внутреннее прерывание после каждой инструкции, позволяя программе проверяться, когда она выполняет инструкцию поинструкция.
Если флаг прерывания сброшен (0), никакая функция не выполняется.

https://en.wikipedia.org/wiki/Trap_flag

Теперь я пишу код на emu-8086.Как объяснено, TF должен быть установлен для работы отладчика.

  • Должен ли я всегда устанавливать TF самостоятельно или он устанавливается автоматически?
  • Если я как-то установлю TF на 0, будут ли работать отладчики целых компьютерных систем или просто emu-8086 не будетотладка?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

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


Если вам интересно, что произойдет, если отлаженная программа (а не эмулируемая) установит флаг TF, тогда ответ таков: это зависит от отладчика.
Правильное поведениеэто тот, где отладчик получает исключения, но это трудно обрабатывать правильно (так как сам отладчик использует флаг TF).
Некоторому отладчику просто наплевать и проглотить исключение (то есть они не пересылаютдля отлаживаемой программы) при условии, что хорошо написанная программа не нуждается в использовании флага TF.
К сожалению, вредоносные программы обычно используют набор методов защиты от отладки, включая установку TF и проверку ее обратно /ожидание исключений для обнаружения присутствия отладчика.

По-настоящему прозрачный отладчик должен тщательно обрабатывать регистр RFLAGS.
При отладке с точками останова TF не устанавливается во время выполнения программы, поэтому беспокоиться не о чем.Однако, когда TF устанавливается на один шаг во время следующей инструкции, это проблематично во время pushfd/q, и отладчик должен явно обрабатывать этот случай, чтобы избежать обнаружения.Если отладчик устанавливает TF, отладчик должен передать в программу исключение отладки - под текущей ОС TF не будет длиться дольше, чем инструкция, потому что ОС поймает исключение, передаст его в сигнал и отправит его программе, покаочистка TF.Таким образом, отладчик может просто выполнить проверку, прежде чем перейти к инструкции popfd/q.
Если TF не очищается ОС, отладчик должен эффективно эмулировать RFLAGS с копией.

0 голосов
/ 21 октября 2018

Отладчик устанавливает TF в соответствии с тем, что ему нужно сделать.Отлаживаемый код не должен изменять TF.

...