原本以为对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 (