首页
社区
课程
招聘
[求助]关于SEH的问题
发表于: 2008-10-16 13:59 3726

[求助]关于SEH的问题

2008-10-16 13:59
3726
因为某些原因,我想通过自定义seh链的办法来略过程序里的异常。

下面是有关代码

    DWORD seh[3];//seh链

    seh[1]=&&myseh;
    asm("movl %%esp,%0":"=r"(seh[2]));//把esp保存到seh[2]
    asm("movl %fs:0,%eax");//调试用
    asm("movl %%fs:0,%0":"=r"(seh[0])::"memory");//把fs:0的内容放入seh[0]地址
    asm("movl %0, %%fs:0": : "r" ((DWORD)&seh));//把seh的首地址放入fs:0
    asm("movl %fs:0,%eax");

    asm("movl $0,%ecx");
    asm("div %ecx");//引发异常,异常后应该来到myseh

myseh:
    asm("movl %fs:0,%eax");
    asm("movl 8(%esp),%esp");//取得我构造的seh数组地址,也就是err块
    asm("movl (%esp),%eax");
    asm("movl %eax,%fs:0");//复原fs:0
    asm("movl 8(%esp),%esp");//复原堆栈

上面的代码执行完毕以后,堆栈,fs:0和eflag都是正常的,但是在退出程序的时候就出了地址访问异常

我还有什么没做么?

顺便提一下,如果有人想说我的做法是多此一举,那么请指教一下,用MingW做DDK开发的时候,如何捕捉异常?我将不胜感激!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//