-
-
[旧帖]
[求助]SEH疑惑
0.00雪花
-
发表于:
2012-3-12 18:04
1727
-
大概问题:有一小程序,VC编译后,在出现异常(除0)前,没有发现SEH链注册上自己的异常处理函数。
程序如下:
#include <iostream>
#include <windows.h>
void fun1( int i)
{
double f = (double) i;
f *= 0.237;
if ( i ^ ( i - i ) | 0x21 )
{
printf("The number is : %d\n", i);
int j = (i+1) / i;
fun1( j-1);
}
else
return;
}
int main()
{
int a;
try
{
scanf("%d", &a);
int j = 0x128;
j *= 6;
fun1(j);
}
catch( ... )
{
printf("You do it.\nBy BetaBin.\n");
}
Sleep(2000);
return 0;
}
除0异常发生指令位置:
自己处理函数位置:
可是查看堆栈的SEH,没有发现自己的处理函数:
然后F9(我在自己的异常处理函数处加了断点),发现跳到我的异常处理函数中了。结果我试了几次,在00425DA0这个异常处理函数中发现了00401257,在内存0043A274中,不过后来设置内存断点,总是没有成功。所以暂时还找不到原因。
为什么我的catch里面的程序块不是被当成一个单独的异常处理函数?(VC编译)或者说VC的SEH包装到底是怎样的。?求解。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课