有关KiTrap06的详细信息

时间:2014-09-12 08:49:29

标签: windows interrupt

我最近开始学习中断,但我觉得我错过了一些重要的东西。

我知道当发生异常类型中断时,我可以让CPU处理它,或者我可以自己处理它,如果我使用__try / __除外。

我知道当CPU尝试执行无效的操作码时会发生此中断。当发生这样的事件时,当前指令的地址(所以当前的eip / rip)被推入堆栈。调用ISR,执行某些操作然后重新执行相同的指令。 这让我觉得它试图跳过无效的操作码或修复它 - 否则为什么返回地址是无效指令的地址?

如果我编译以下用户模式代码:

int main()
{
    printf("before\n");
    __asm
    {
        UD2
    };
    printf("after\n");
    return 0;
}

应用程序崩溃而不打印第二条消息。 如果我将UD2放在__try / __除了块中,我可以处理它,应用程序将不再崩溃。

驱动程序中的UD2指令将蓝屏系统。

那么KiTrap06究竟在做什么?或者在这种情况下发生崩溃,因为UD2是出于测试目的而在实际情况下结果可能不同?

0 个答案:

没有答案