Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 如果在8086微处理器中将TF(陷阱标志)设置为0,会发生什么情况?_Debugging_Assembly_Flags_Emu8086 - Fatal编程技术网

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

Debugging 如果在8086微处理器中将TF(陷阱标志)设置为0,会发生什么情况?,debugging,assembly,flags,emu8086,Debugging,Assembly,Flags,Emu8086,我在这里搜索到: 陷阱标志T–此标志用于芯片调试。设置陷阱 标志将微处理器置于单步模式进行调试。在里面 单步执行,微处理器执行指令并输入 分为单步ISR。 如果陷阱标志设置为1,CPU将自动生成内部 在每条指令后中断,允许检查程序 因为它一条一条地执行指令。 如果陷阱标志重置为0,则不执行任何功能 现在我在emu-8086上编码。如前所述,必须设置TF才能使调试器工作 我应该自己设置TF还是自动设置TF? 如果我以某种方式将TF设置为0,那么整个计算机系统的调试器会工作吗?或者只是emu-808

我在这里搜索到:

陷阱标志T–此标志用于芯片调试。设置陷阱 标志将微处理器置于单步模式进行调试。在里面 单步执行,微处理器执行指令并输入 分为单步ISR。 如果陷阱标志设置为1,CPU将自动生成内部 在每条指令后中断,允许检查程序 因为它一条一条地执行指令。 如果陷阱标志重置为0,则不执行任何功能

现在我在emu-8086上编码。如前所述,必须设置TF才能使调试器工作

我应该自己设置TF还是自动设置TF? 如果我以某种方式将TF设置为0,那么整个计算机系统的调试器会工作吗?或者只是emu-8086不会调试?
调试器根据需要执行的操作设置TF。正在调试的代码不应修改TF。

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

我从未使用过emu8086,但通过查看它的一些屏幕截图,并根据它的名称判断,它可能是一个-这意味着它不是以本机方式运行代码。 每条指令都在改变虚拟8086 CPU的状态,该CPU在内存中表示为数据结构,而不是实际CPU的状态。 通过这种仿真,emu8086不需要依赖TF标志来单步执行程序,它只需要在一步仿真后停止,等待您按下另一个按钮。 这也是为什么你能找到像后退这样的东西

如果您想知道如果一个调试过的程序而不是一个仿真程序设置了TF标志会发生什么,那么答案是它取决于调试器。 正确的行为是调试对象接收异常,但这很难正确处理,因为调试程序本身使用TF标志。 一些调试器只是不关心并接受异常,即,假设编写良好的程序不需要使用TF标志,它们不会将异常转发给正在调试的程序。 不幸的是,恶意软件通常使用一套反调试技术,包括设置TF并将其检查回来/等待异常以检测调试器的存在

真正透明的调试器必须小心地处理RFLAGS寄存器。 在使用断点进行调试时,程序执行时不会设置TF,因此无需担心。 但是,如果在下一条指令中设置单步TF,则在pushfd/q期间会出现问题,调试器必须显式处理该情况以避免检测。 如果调试对象设置了TF,则调试器必须将调试异常传递给程序-在当前操作系统下,TF不会持续超过一条指令,因为操作系统将捕获异常, 在清除TF的同时,将其转换为信号并发送给程序。因此,调试器只需在进入popfd/q指令之前进行检查。
如果操作系统没有清除TF,则调试器必须使用副本有效地模拟RFLAG

我从未使用过emu8086,但通过查看它的一些屏幕截图,并根据它的名称判断,它可能是一个-这意味着它不是以本机方式运行代码。 每条指令都在改变虚拟8086 CPU的状态,该CPU在内存中表示为数据结构,而不是实际CPU的状态。 通过这种仿真,emu8086不需要依赖TF标志来单步执行程序,它只需要在一步仿真后停止,等待您按下另一个按钮。 这也是为什么你能找到像后退这样的东西

如果您想知道如果一个调试过的程序而不是一个仿真程序设置了TF标志会发生什么,那么答案是它取决于调试器。 正确的行为是调试对象接收异常,但这很难正确处理,因为调试程序本身使用TF标志。 一些调试器只是不关心并接受异常,即,假设编写良好的程序不需要使用TF标志,它们不会将异常转发给正在调试的程序。 不幸的是,恶意软件通常使用一套反调试技术,包括设置TF并将其检查回来/等待异常以检测调试器的存在

真正透明的调试器必须小心地处理RFLAGS寄存器。 在使用断点进行调试时,程序执行时不会设置TF,因此无需担心。 但是,如果在下一条指令中设置单步TF,则在pushfd/q期间会出现问题,调试器必须显式处理该情况以避免检测。 如果调试对象设置了TF,则调试器必须将调试异常传递给程序-在当前操作系统下,TF不会持续超过一条指令,因为操作系统将捕获异常, 在清除TF的同时,将其转换为信号并发送给程序。因此,调试器可以简单地执行c 在进入popfd/q指令之前进行检查。 如果操作系统没有清除TF,则调试器必须使用副本有效地模拟RFLAG