你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 计算机安全与维护
Linux下实现Windows的结构化异常处理(五)
 

END_EXCEPT_PROTECT();

但是遇到如下情况,不恢复堆栈指针就会出现问题:

int foo2()

{

int a=1;

int b=2;

int *p=0;

 

*p=a+b;

return 0;

}

int foo1()

{

BEGIN_EXCEPT_PROTECT()

{

  foo2();

}

EXCEPT_HANDLER()

{

  printk(KERN_ERR”Invalid pointer!\n”);

}

END_EXCEPT_PROTECT()

 

return 0;

}

 

发生异常时,代码已经进入到一个子函数中,此时堆栈指针已经指向一个新的位置,如果将控制权转到异常处理程序时不恢复指针,可以想象,后面的代码在引用局部变量以及返回上层函数时,会乱得一团糟――因为此时的堆栈已经不是注册异常处理程序时的堆栈了。

以上两段代码,就构成了一个完整的异常服务程序。

 

3  注册/取消异常处理程序

异常服务程序已经完成,下面要做的就是在运行危险代码之前,注册异常处理程序,在危险代码运行结束/异常处理完毕之后,取消注册的异常处理程序。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089