据我所知,现代操作系统为调试提供了api。当调试器进程要求内核在另一个进程的机器代码指令上设置断点时,内核用一个导致中断的操作码替换指令的第一个字节。
中断处理程序将暂停进程,保存寄存器并通知调试进程。
我不明白的是乱序执行处理器究竟发生了什么。中断指令可以在它的前任之前或之后执行,因此,在中断时,寄存器和存储器将包含错误的值。
答案 0 :(得分:1)
这就是为什么所有有序事件(如中断,故障,异常等)总是在无序处理器中的提交点处理,原始程序顺序在该处理器中恢复,并且可以捕获正确的机器状态。这意味着您可能知道待处理事件但仍然延迟处理它。
请注意,外部世界可见的操作(例如存储到内存)也会在此阶段之后处理,因此您永远无法查看无序核心的推测内部状态(除了侧通道攻击方法之外)。 ..),任何中断或断点也将正确排序