`int 3` 真正应该做什么?

What is `int 3` really supposed to do?

根据this int 3从用户空间使用来生成SIGTRAP。

但是在用户空间下的特权应该做什么?

还有更多可以从用户空间 SIGTRAP 生成的东西吗?

操作码 int 3 对 unix 约定一无所知,例如 SIGTRAP。 Int 3产生异常,通过index 3 vectored。常规认为是debug异常,实际上debug寄存器也会通过同样的index产生异常。

Int 3有点特殊,因为它是单字节操作码;与其他需要 2 的 int $n 指令不同。因为它是单字节,所以它可以用于通过用它重写现有操作码的第一个字节来在程序中放置断点。 虽然从技术上讲,您可以使用多字节操作码来执行此操作,但程序文本中的下一个字节可能是您可能损坏的重要数据或跳转标签。

按照惯例,unix 派生的操作系统会在遇到此操作码时发出信号 (SIGTRAP);这为调试器(或内核中的调试模块)提供了查找违规地址的机会,以查看它之前是否在此地址设置了断点(或观察点)。如果是这样,它将执行通常的调试器操作。否则,它可能会将 SIGTRAP 传播到有问题的进程。

在特权(内核)代码中遇到断点的情况下,处理过程没有太大区别,但会期望内核调试器处于活动状态,并且会遵循与上述类似的处理过程,除了没有未决断点的结果可能会导致系统停止,并在控制台上显示一堆有趣的数字。