SEH(Structured Exception Handling)简介
SEH是一种在Windows操作系统中用于处理异常的机制。它提供了一种结构化的方式来捕获和处理程序中的错误。SEH是C++语言的一部分,通过使用try-catch块,可以有效地管理程序中的错误,从而提高程序的稳定性和健壮性。
SEH异常链表
在Windows操作系统中,每个线程都维护一个称为“当前上下文”(Current Context)的数据结构,该数据结构包含了一个指向可用异常处理器列表头结点的指针。当发生异常时,控制权会传递给这个列表上的第一个可用的异常处理器。在此过程中,如果没有找到合适的处理器,则将继续沿着链表向后查找,直至找到合适的一个或者到达链表末尾。
异常记录(Exception Records)
当抛出或捕获一个例外时,都会创建一个新的例外记录,并将其添加到当前上下文所维护的例外记录队列中。这些例外记录包含了有关该例外事件的大量信息,比如它是在哪个函数调用栈帧发生的问题、该问题是否已经被某个之前出现过的问题覆盖等等。
使用SEH进行异步编程
SEH也可以用来实现异步编程模型,其中最著名的是I/O完成端口(I/O Completion Ports)。通过使用SEH,我们可以在执行长时间运行任务时暂停执行,然后在任务完成时恢复执行。这使得我们能够高效地利用资源,同时也能保证用户界面响应性。
SEH与安全特性的结合
由于SEH提供了一种强大的错误检测和纠正能力,它们通常与其他安全技术结合起来,如地址空间布局随机化(ASLR)和数据执行保护(DEP),从而大幅提升应用程序对恶意攻击的抵御力。例如,在一些情况下,攻击者可能尝试利用未初始化内存区域来注入代码,但如果应用程序正确地使用了SEH,那么即便攻击成功,也无法正常运行,因为他们无法预测何处会触发什么样的异常,从而导致他们自己的代码崩溃。