找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7845|回复: 5

[讨论]用__try......__except()捕捉执行异常

 火.. [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-7-5 09:43:45 | 显示全部楼层 |阅读模式
用__try......__except()捕捉RING3的执行异常是可以的:

  1. void CatchExectionException()
  2. {
  3.         typedef void (*TESTFUNC)(void);
  4.         TESTFUNC TestFunc;
  5.         ULONG xx=0xc3909090,zz;
  6.         TestFunc=(TESTFUNC)(&xx);
  7.         VirtualProtect(&xx,4,PAGE_EXECUTE_READWRITE,&zz);  //这句很重要
  8.         __try
  9.         {
  10.                 TestFunc();
  11.         }
  12.         __except(EXCEPTION_EXECUTE_HANDLER)        //出错就会执行到这里
  13.         {
  14.                 MessageBoxA(0,"fuck",0,0);
  15.         }
  16. }
复制代码
如果不加VirtualProtect,无论是X86,还是X64,都会弹出"fuck"对话框,如果加了则不弹出。
但是,如果把这段代码移植到RING0,当执行到没有可执行属性的内存时,会马上蓝屏。
求助:如何捕捉RING0下的执行异常(判断内核内存有没有可执行属性)?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2012-7-10 13:33:02 | 显示全部楼层
sb666 发表于 2012-7-10 11:31
我估计只能一个一个试了……蓝了就再换……


疾了么???{:soso_e141:}

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2012-7-10 17:28:57 | 显示全部楼层
依然使用__try......__except()

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2012-7-11 12:49:45 | 显示全部楼层
watchsky 发表于 2012-7-10 17:28
依然使用__try......__except()

我试过,会蓝屏。
要不你放一个带SRC的DEMO上来看看。

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2012-7-11 13:08:43 | 显示全部楼层
Tesla.Angela 发表于 2012-7-11 12:49
我试过,会蓝屏。
要不你放一个带SRC的DEMO上来看看。

src找不到了,记得AK922里用到过,x86的驱动应该没问题

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-8 20:37:11 | 显示全部楼层
看看
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表