VS编译选项Debug与Release的区别

IT老混混 2016-02-07 04:57:18
这段代码为什么使用Release模式编译时和Debug不一样,Debug编译运行不会奔溃,Release会奔溃:
#include
#include
int main(){
CONTEXT* contex;
EXCEPTION_RECORD* exception;
__asm{
call seh
mov ecx,dword ptr ss:[esp+0xC]
mov contex,ecx
mov ecx,dword ptr ss:[esp+0x4]
mov exception,ecx
}

if (exception->ExceptionCode==EXCEPTION_BREAKPOINT)
{
contex->Eip+=1;
printf("发现一个int3断点\n");
__asm{
xor eax,eax
retn
}
}
printf("异常不是我触发的\n");
__asm{
mov eax,1
retn

seh:
push dword ptr fs:[0]
mov dword ptr fs:[0],esp
}
__asm{
int 3
}
system("pause");
return 0;

}
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-02-08
  • 打赏
  • 举报
回复
崩溃时点中断,然后寻找出错位置分析原因
liups 2016-02-08
  • 打赏
  • 举报
回复
帮顶
IT老混混 2016-02-08
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
崩溃时点中断,然后寻找出错位置分析原因
发生异常时KiUserExceptionDispatcher是被调用了的,但是在跟进第一个call后发现调用异常处理程序的那个call被跳过 难道要在Release模式下玩SEH,就只能截获 KiUserExceptionDispatcher函数
IT老混混 2016-02-08
  • 打赏
  • 举报
回复
引用 1 楼 liups 的回复:
帮顶
发生异常时KiUserExceptionDispatcher是被调用了的,但是在跟进第一个call后发现调用异常处理程序的那个call被跳过 难道要在Release模式下玩SEH,就只能截获 KiUserExceptionDispatcher函数
iqy 2016-02-08
  • 打赏
  • 举报
回复
debug在没有安装vs的环境下不能运行,release则可以,正式发布要用release。

9,505

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧