int 3 操作码并不了解UNIX约定,例如SIGTRAP。int 3会生成异常,该异常通过索引3进行矢量处理。它通常被认为是调试异常,实际上,调试寄存器也将通过相同的索引生成异常。int 3有点特殊,因为它是一个单字节操作码;与需要2个字节的其他int $ n指令不同。由于它是一个单字节,因此它可以通过使用它来重新编写现有操作码的第一个字节,在程序中放置断点。 尽管从技术上讲,您可以使用多字节操作码来做到这一点,但可能紧接着程序文本的下一个字节是重要的数据或跳转标签,您可能会破坏它们。按照惯例,衍生自UNIX的操作系统遇到此操作码时将引发信号(SIGTRAP)。这为调试器(或内核中的调试模块)提供了机会,以查找冒犯地址,看看它是否先前在该地址处设置了断点(或监视点)。如果有,则执行通常的调试器操作。如果没有,就可能将SIGTRAP传播到冒犯进程。如果在特权(内核)代码中遇到断点,处理过程并没有太大的区别,但是期望有一个内核调试器处于活动状态,并且它会遵循与上述类似的处理过程,只是在没有挂起断点的情况下,可能会在控制台上停止系统并显示一堆有趣的数字。
Int 3生成一个异常,该异常通过索引3进行向量化。
<-但汇编语言不知道异常,对吧?你是指中断吗?如果是这样,在ia32和amd64上是哪个中断?其他架构呢? - 1737973