最初发布在QQ空间,见:SEH中的prolog和epilog,内有贴图。
使用SEH的代码都需要构建栈桢,支持exception处理的栈桢,而重复的代码就应当提炼成函数,微软自然不会例外。为此系统提供了prolog和epilog系列,类似的函数有不少版本,但大同小异。这次不用调试器,分析下__SEH_prolog4_GS和__SEH_epilog4_GS 2个函数,看看它们如何工作支持异常的栈桢结构。
先看看prolog,这是内核函数KiDispatchException调用__SEH_prolog4_GS的代码,
000 push 0F8h
004 push offset off_8488DCE0
008 call __SEH_prolog4_GS
调用函数前传递2个参数,一个是需要保留的栈的大小,一个是指针。
再看看函数代码本身,详细的注释在代码后面,
; two instrucitons before call it.
;
; take KiDispatchException as example,
;
; 000 push 0F8h ; it's used as a stack size
; 004 push offset off_8488DCE0 ; it's pointer

本文探讨了在Windows系统中,SEH(结构化异常处理)的prolog和epilog函数如何构建和恢复异常处理栈帧。通过分析__SEH_prolog4_GS和__SEH_epilog4_GS,展示了这两个函数在异常处理过程中的作用,包括栈的改变、异常栈帧结构的建立以及数据结构的检查。同时,提到了数据结构对于理解代码实现的重要性。
最低0.47元/天 解锁文章
4202

被折叠的 条评论
为什么被折叠?



