SEH学习心得【1】

(近日遇到大量SEH问题,所以觉得有必要好好研究研究。)

一、SEH的汇编实现

从实践入手,汇编实现SEH其实不难。简单点如下指令:

push offset_exception_function_address
push fs:[0]
mov fs:[0], esp


二、SEH的简单理解

SEH(Structured Exception Handling),是Windows下的一个结构化异常处理。和C++所提倡的不同。(这里区分于try{}catch{}结构,应该是__try{}__except{int}的结构。至于具体的不同,还需要翻阅资料。)简单点理解,每个线程都有自己的SEH链表,链表元素为指向异常处理函数的指针及指向下个异常处理函数地址的指针。链表尾部用0xFFFFFFFF代表。

这样理解上面的汇编代码就好多了。把新加入的异常处理函数地址压入栈中,再压入SEH的链表头地址(既是指向上一异常处理函数地址的指针),然后把此时的ESP存放到FS:[0]中。这样就是实现了异常处理函数的加入。

关于FS段,暂时可以简单理解为FS:[0]是指向SEH链表头的指针。至于其它的还需要进一步学习才能掌握。

 
 
 
 
 
 
 
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值