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

Вот это я искал:

Флаг ловушки (T) — этот флаг используется для отладки на кристалле. Установка флага trap переводит микропроцессор в пошаговый режим для отладки. В одношаговом режиме микропроцессор выполняет инструкцию и входит в одношаговую ISR.
Если установлен флаг ловушки (1), ЦП автоматически генерирует внутреннее прерывание после каждой инструкции, позволяя проверять программу по мере выполнения инструкции с помощью инструкция.
Если флаг trap сброшен (0), никакая функция не выполняется.

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

Сейчас кодирую на emu-8086. Как объяснялось, для работы отладчика необходимо установить TF.

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

person aizhan_maksatbek    schedule 21.10.2018    source источник


Ответы (2)


Я никогда не использовал 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

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

person prl    schedule 21.10.2018