在32位模式编程中,我经常在程序中使用
int 3
来使程序停留在调试器指定的位置(在源代码中嵌入该指令)。现在在64位模式下,它似乎无法工作,在gdb下产生了一个非常普通的SIGSEGV,并且毁掉了程序("Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists.")。我想知道64位模式是否有另一种机制,或者我是否需要做一些缓存刷新(在这种情况下int 3
是动态生成的操作码(0xcc),类似jit的代码)。
int 3
是CD 03
,您需要写int3
(无空格)才能获得0xCC
单字节操作码。根据Intel的int n / int3手册,实际上在vm86模式下差异很大。但是,是的,Intel的手册确实确认它在64位模式下的行为相同,因此任何行为上的差异都取决于内核和/或调试器。 - Peter Cordes