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