SEH中的prolog和epilog

最初发布在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 to scope table entry.
    __SEH_prolog4_GS proc near
    arg_4= dword ptr  8
000 push    offset __except_handler4
004 push    large dword ptr fs:0
008 mov     eax, [esp+8+arg_4] ; so now there are 5 values in stack.
                            ;
         
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值