所以有"int 3"这是一个用于调试器断点的中断指令.
但是还有"int 1"用于单步执行.但为什么需要呢?我已经读过,在EFLAGS寄存器中设置陷阱标志(TF)将启用单步执行,并将为每条指令捕获到操作系统.那么为什么需要单独的中断类型呢?
谢谢!
Nei*_*eil 11
int 3是一个特殊的1字节中断.调用它将进入调试器(如果存在),否则应用程序通常会崩溃.
当调试器设置陷阱标志时,这会导致处理器int 1在每条指令后自动执行中断.这允许调试器通过指令单步执行,而无需插入int 3指令.您不必显式调用此中断.
您将INT和INT 3指令与中断向量混淆,如果调用该指令,这些指令将通过这些向量调用.没有单步指令.
如果调试器存在,则INT 3(或"断点指令")将调用调试器(或者更确切地说,调试器将挂接INT 3向量,以便在INT 3发生时调用调试器).
如果调试器设置TF(跟踪标志),则每条指令都将导致#1中断发生.这将导致调用该中断向量中的任何地址.希望这将是调试器的单步程序.最终,调试器将清除TF,导致单步中断停止.