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