首页
社区
课程
招聘
[求助].Net 如何在出现异常后,跳回异常发生点继续执行?
发表于: 2012-10-16 13:14 4847

[求助].Net 如何在出现异常后,跳回异常发生点继续执行?

2012-10-16 13:14
4847
想要实现这样一个功能:
try
{
   A();
   B();
   C();
   ...
}
catch(Exception ex)
{
//A,B,C都可能会出现异常,想要在执行修复动作后,跳回出现异常的那一行代码

}

目前思路是想先获取当前线程堆栈,在堆栈里找出偏移量,然后修改EIP指向偏移量。但是问题是:
1.不知道如何在异常发生时,计算出偏移量。
2.如何修改托管线程的EIP?

有了解的朋友不妨说一下,感谢!

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
try
{
   A();
   B();
   C();
   ...
}
好比一块灵活的积木,在产生异常后可以回调这些函数,同时每次异常或者每次回调A,b,c时功能都可以不一样,所以很容易变形和修改,甚至是重定位。try的内部框架可以更复杂点!
2012-10-16 15:12
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上可能没理解我的意思,A,B,C是按流程执行的,如果在执行B的时候出现异常,再goto到起始点,又从A开始执行,那么就出错了。我想要的效果是在哪一行里出现异常,做一些异常处理之后,再跳回出现异常的那一行继续执行下去。

如果在C++里,通过SEH和线程的context很容易实现这样的功能,但是不知道.NET中如何实现。
2012-10-16 19:42
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哦,不好意思误解了,不过请问C++如何通过SEH和线程的context来容易的控制绕过异常继续执行后面的代码呢?.Net我真不懂!还请指导下
2012-10-16 22:12
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
大师,求C++容易绕过的例子,try...catch,就像你刚才说的那样,诚恳的等待中...嘿,记得带上你的goto
2012-10-16 23:27
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
http://bbs.pediy.com/showthread.php?t=154271  论坛上就有例子了
2012-10-17 08:07
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
嗯,谢谢,非常棒的汇编例子,可惜不是C++容易的例子,这一点毋庸置疑。

附录:这容易的背后作为创造者来说,今天的容易换来的是创造者无数的艰辛!
2012-10-17 14:20
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
A,B,C三个方法分别try,catch.
分别在异常里再调用a,b,c三个方法
2012-10-22 14:28
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这里A,B,C只是为了举例方便,实际上方法会有很多,并且每个方法调用子方法时都可能出现异常。如果执行到A的一半,然后再从A最开始的流程继续执行,整个程序的流程就错了。所以希望能跳回错误发生的那一行代码继续执行。
2012-10-25 21:05
0
游客
登录 | 注册 方可回帖
返回
//