首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在8086微处理器中TF(陷阱标志)设置为0会发生什么?

如果在8086微处理器中TF(陷阱标志)设置为0会发生什么?
EN

Stack Overflow用户
提问于 2018-10-21 19:32:04
回答 2查看 2.1K关注 0票数 1

我在这里搜索了:

陷阱标志(T) -此标志用于片上调试.设置陷阱标志会使微处理器进入单步模式进行调试。在单步执行中,微处理器执行指令并进入单步ISR。 如果设置了陷阱标志(1),CPU在每条指令之后自动生成内部中断,允许在通过指令执行指令时检查程序。 如果重新设置了陷阱标志(0),则不执行任何功能。

标志

现在我正在对emu-8086进行编码。如前所述,要使调试器工作,就必须设置TF。

  • 我应该总是自己设置TF,还是自动设置?
  • 如果我以某种方式将TF设置为0,那么整个计算机系统调试器会正常工作还是只有emu-8086不会调试?
EN

回答 2

Stack Overflow用户

发布于 2018-10-23 15:36:53

我从未使用过emu8086,但是通过查看它的一些屏幕截图,并根据它的名称判断它可能是一个仿真器 -这意味着它不是以本地方式运行代码。

每条指令都在改变虚拟8086 CPU的状态(表示为内存中的数据结构),而不是改变实际CPU的状态。

通过这种模拟,emu8086不需要依赖TF标志来实现程序的单步执行,它只需要在一步仿真之后停止,然后等待您按下另一个按钮。

这也是为什么你可以找到像“退一步”这样的东西。

如果您想知道如果调试的程序(而不是模拟的程序)设置TF标志会发生什么,那么答案是它取决于调试器。

正确的行为是调试器接收异常,但这很难正确处理(因为调试器本身使用TF标志)。

有些调试器只是不关心和吞下异常(即,他们不将其转发到正在调试的程序),前提是编写良好的程序不需要使用TF标志。

不幸的是,恶意软件通常使用一组反调试技术,包括设置TF并检查它回/等待异常以检测调试器的存在。

真正透明的调试器必须小心地处理RFLAGS寄存器。

在使用断点进行调试时,在程序执行时不设置TF,因此没有什么可担心的。但是,当在下一条指令中设置TF单步时,这在pushfd/q期间是有问题的,调试器必须显式地处理这种情况以避免检测。如果调试器设置TF,调试器必须将调试异常传递给程序--在当前操作系统下,TF不会超过一条指令,因为操作系统将捕获异常,将其转换为信号,并在清除TF的同时将其发送给程序。因此,调试器可以在进入popfd/q指令之前简单地进行检查。

如果TF没有被操作系统清除,调试器必须使用副本有效地模拟RFLAGS

票数 5
EN

Stack Overflow用户

发布于 2018-10-21 19:43:58

调试器根据需要设置TF。正在调试的代码不应修改TF。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52919089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档