关于 *(int*)0 = 1 ; 这样的异常捕捉

Mushu 2013-02-04 10:21:11
想问问关于 *(int*)0 = 1 ; 这样的异常捕捉 该怎么做?
...全文
230 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-02-04
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
「已注销」 2013-02-04
  • 打赏
  • 举报
回复
int main(int argc, char* argv[])
{
	try
	{
		*(int*)0 = 1 ;
	}
	catch (...)
	{
		printf("Hello World!\n");		
	}
	return 0;
}
好好的打印了hello world啊,是你写的有问题,异常是调用中断的,没有哪个API能拦截
Mushu 2013-02-04
  • 打赏
  • 举报
回复
引用 2 楼 chuachua66 的回复:
常量地址修改,是不是只能catch(...)了。
貌似只能修改WIN平台的崩溃调用的API
Mushu 2013-02-04
  • 打赏
  • 举报
回复
引用 2 楼 chuachua66 的回复:
常量地址修改,是不是只能catch(...)了。
直接就奔溃了。没有进入catch。
chuachua66 2013-02-04
  • 打赏
  • 举报
回复
常量地址修改,是不是只能catch(...)了。
奇趣科技 2013-02-04
  • 打赏
  • 举报
回复
没看懂什么意思。
yisikaipu 2013-02-04
  • 打赏
  • 举报
回复
引用 7 楼 Mushu 的回复:
引用 5 楼 jha334201553 的回复:C/C++ code?123456789101112int main(int argc, char* argv[]){ try { *(int*)0 = 1 ; } catch (...) { printf("Hello World!\n"); ……
VS ? 设置编译选项 /Eha http://msdn.microsoft.com/en-us/library/1deeycx5(v=vs.90).aspx
Mushu 2013-02-04
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
调试出来的中断处函数都是保护着。不知道里面调用什么API。
Mushu 2013-02-04
  • 打赏
  • 举报
回复
引用 5 楼 jha334201553 的回复:
C/C++ code?123456789101112int main(int argc, char* argv[]){ try { *(int*)0 = 1 ; } catch (...) { printf("Hello World!\n"); } return 0;}好好的打印了hel……
我还没打印出 Hello World!...可能编译环境问题。我大概想法是在奔溃前保存EIP,奔溃的时候WINDOWS要跳入NTDLL,所以HOOK着那里,然后调换之前的EIP。

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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