异常原理
除零异常是由硬件抛出
内存无效的访问是由操作系统抛出
也可以在代码中使用RaiseException调用,显式抛出异常
这里也就说明了异常被处理完成之后如何回到我们的代码流继续执行代码(通过栈帧)
当然漏洞的利用也可以通过将栈发生溢出,然后主动抛出一个异常,代码流也就会主动跑到刚刚溢出的异常处理函数中执行代码
异常会有两次处理机会,调试器优先,其次是我们程序写的异常处理函数
常见的异常有Int3,单步调试也成为操作系统内的一个异常来实现
单步调试也成为操作系统内的一个异常来实现,标志寄存器中的陷阱标志用于单步调试,处理器每执行一条指令就会产生异常
还有内存访问异常(DEP保护)
还有特权模式才能执行的指令,如果在非特权下执行,处理器就会产生异常(特权:内核 非特权:用户)