__report_gsfailure中UEF的特殊行为
来源:互联网 发布:plsql导出用户数据 编辑:程序博客网 时间:2024/04/29 22:56
原本以为对UEF的逻辑已经大概了解了(理解UnhandledExceptionFilter),最近调试__report_gsfailure的时候却碰到了新问题。从VS2005以来,编译器添加了对栈的保护检查以防止buffer overrun的危害。一旦发现栈的内容出现错误,会调用__report_gsfailure,代码如下:
1. DebuggerWasPresent = IsDebuggerPresent(); 2. _CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE); 3. 4. SetUnhandledExceptionFilter(NULL); 5. UnhandledExceptionFilter((EXCEPTION_POINTERS *)&GS_ExceptionPointers); 6. if (!DebuggerWasPresent) 7. { 8. _CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE); 9. } 10.TerminateProcess(GetCurrentProcess(), STATUS_STACK_BUFFER_OVERRUN);
使用一小段简单的代码即可测试之,
char overBuf[8]; DWORD dwForBuf;
char anotherBuf[8]; DWORD dwForAnotherBuf;
dwForBuf = 0x12341234; // break compiler fense strcpy( overBuf, "12345678""/xcc/xcc/xcc/xcc""1234" );
dwForAnotherBuf = 0xabcdabcd; strcpy( anotherBuf, "0123" );
1. 使用VS调试的时候,执行到最后会在第2行_CRT_DEBUGGER_HOOK处断下来,不知道原因,怀疑是VS做了特别的处理,因为使用windbg调试的时候,就象是执行了一个普通的函数,没有任何问题。
2. 使用windbg的时候,是断在了kernel32!UnhandledExceptionFilter里,也就执行第5行的时候,有个int 3的断点指令。记得UEF的处理逻辑是在调试器里运行的时候直接返回EXCEPTION_CONTINUE_SEARCH, 为什么会产生了断点?
3. 如果在调试器外执行,结果应该如何?
第一个问题的答案在这: __report_gsfailure中UEF的特殊行为 (1)
第二个问题的答案在这: __report_gsfailure中UEF的特殊行为 (2)
第三个问题的答案在这: __report_gsfailure中UEF的特殊行为 (3)
- __report_gsfailure中UEF的特殊行为
- 利用unity3d属性来设置Inspector面板的特殊行为
- 浅谈SEH和UEF
- Windows 中特殊的文件名
- Windows 中特殊的文件名
- SHELL中特殊的变量
- 代码中特殊的注释
- java 中特殊的关键字
- python中特殊的方法
- Java中特殊的String
- java中特殊的类
- unity中特殊的文件夹
- 关于SHELL中一些特殊的$打头的特殊变量
- 深入探讨java中引用的行为
- 重写javascript中window.confirm的行为
- WPF TypeConvert中 ConvertFrom的行为
- 重写javascript中window.confirm的行为
- js原型继承中setter的行为
- android之多线程工作(一)AsyncTask
- 不要打酱油……不要打酱油……
- oralce 执行计划
- Oracle的五类约束
- 话说getchar()等函数的返回值
- __report_gsfailure中UEF的特殊行为
- SP,用response.setHeader下载中文附件名乱码解决
- apache myfaces trinidad 2即将发布
- Linux下MySQL安装及相关操作过程
- jquery获取地址栏参数
- Apache for window 运行错误记录
- Linux中vi文件保存退出命令":wq"和":x"的区别
- flvplayer.swf flv视频播放器使用方法
- Dojo1.6新特性:再谈AMD规范