破解笔记1——SEH

 


    对于SEH(Structured Exception Handling)结构化异常处理的初步理解:是在CPU指令层次上给程序设计者提供异常处理,C++中的_try{}_except{}结构不过是在高层对SEH的包装。从总体上来说SEH是一个异常处理回调函数的链表,以线程基本单位,每个线程拥有自己的SEH处理链,出现异常时可以顺着SEH链依次调用异常处理函数,直到找到适合的处理函数为止。在线程创建之初系统会提供一个默认的异常处理函数——出现异常时弹出“XXXX处出现异常,退出或调试”窗口。为了处理异常设计者可以用SetUnhandledExceptionFilter()向系统注册处理异常的回调函数,将回调函数添加到SEH处理链的头部,在出现异常时被第一个调用。

在汇编的层面向注册SEH链注册异常处理回调函数非常的简单,首先我们必须了解以下事实:SEH链保存在堆栈中,每个节点由两个指针构成占用8个字节,高地址的4个字节存放回调函数的地址,低地址的4个地址指向下一个节点,链尾值为0xffffffff。fs:[0]指向SEH链的头部,所以异常处理回调函数的注册过程可以简要描述为:

push offset exception_function_address

push fs:[0]

mov fs:[0], esp


介绍SEH的经典:http://www.xfocus.net/articles/200503/785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值