关于seh(2) by sssa2000
1.首先,怎么使用seh 昨天我们说的是c++中封装好的东西,现在我们接触的是赤裸裸的seh哦. 【程序编程相关:权限系统概要】
马家爵被捕了,心中极度的痛苦呀.aaah说我中了毒,mydoom,我下了专杀工具,没发现,现在我变得异常警惕,连rundll32这个进程一看就关.正题. 【推荐阅读:VC编程经验汇总(三)】
怎么设置呢?很简单,3句就可以搞定: 【扩展信息:蛙蛙推荐:类中的静态成员和非静态成员(C】
seh工作原理就是预先设置好处理异常的函数,然后如果有异常 首先,要使用seh必须先设置处理异常的回调函数.
把回调函数的地址入栈 push offset _handler 把fs:[0]入栈 push fs:[0] 把esp存入fs:[0] mov fs:[0],esp
为什么要这样呢?这就要说说tib了. win32为每个线程定义一个线程信息块tib,这个结构中有一个 exceptionlist的指针,它是seh的链入口.
这个指针指向一个exception_registration结构,定义如下: exception_registration struct prev dd ? ;前一个exception_registration的地址 handler dd ? ;回调函数的地址 exception_registration ends
有了这个结构才能把很多seh联结成链状,注意,这里讲的是基本节构,很多其他资料上还有其他的什么附加数据,那都是自己加上去的,最基本的就这两个.
现在在来讲解前面的那三句 由于tib永远载fs:[0] 所以,fs[0]指向的就是exceptionlist指向的东西,也就是exception_registration.
... 下一页