Kernel “int 3”到底应该做什么?

Kernel “int 3”到底应该做什么?,kernel,Kernel,根据int3从用户空间生成SIGTRAP 但是,在特权用户空间下,它应该做什么呢 还有更多的东西可以从用户空间SIGTRAP生成这样的内容吗?操作码int3对unix约定一无所知,比如SIGTRAP。INT3生成一个异常,该异常通过索引3进行矢量化。它通常被认为是调试异常,事实上调试寄存器也会通过相同的索引生成异常 INT3有点特殊,因为它是一个单字节操作码;与其他需要2的int$n指令不同。因为它是一个单字节,所以可以使用它重写现有操作码的第一个字节,从而在程序中放置断点。 从技术上讲,您可以

根据
int3
从用户空间生成SIGTRAP

但是,在特权用户空间下,它应该做什么呢

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

操作码int3对unix约定一无所知,比如SIGTRAP。INT3生成一个异常,该异常通过索引3进行矢量化。它通常被认为是调试异常,事实上调试寄存器也会通过相同的索引生成异常

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

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

在特权(内核)代码中遇到断点的情况下,处理过程没有太大不同,但内核调试器处于活动状态,并且将遵循与上述类似的处理过程,除了没有挂起断点的结果可能会在控制台上用一堆有趣的数字使系统停止之外。

操作码int 3对unix约定一无所知,例如SIGTRAP。INT3生成一个异常,该异常通过索引3进行矢量化。它通常被认为是调试异常,事实上调试寄存器也会通过相同的索引生成异常

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

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


在特权(内核)代码中遇到断点的情况下,处理过程没有太大不同,但内核调试器处于活动状态,并且将遵循与上述类似的处理过程,除了没有挂起断点的结果可能会在控制台上用一堆有趣的数字使系统停止之外。

那么这仍然是内核级的黑客攻击<代码>Int 3生成一个异常,该异常通过索引3矢量化。机器体系结构定义异常;因此,虽然程序集不知道它们,但实现它的机器却非常了解它们。它不是一个真正的黑客,它是一个定义良好的架构组件,并且精确地实现以满足其目的。它的用途比调试更广泛,例如,许多跟踪工具依赖断点来检测哪些已经执行,哪些还没有执行。所以它仍然是内核级的黑客<代码>Int 3生成一个异常,该异常通过索引3矢量化。机器体系结构定义异常;因此,虽然程序集不知道它们,但实现它的机器却非常了解它们。它不是一个真正的黑客,它是一个定义良好的架构组件,并且精确地实现以满足其目的。它的用途比调试更广泛,例如,许多跟踪工具依赖断点来检测已经执行和尚未执行的内容。