超级技术:微软官方编译器对于栈的检查
💡
原文中文,约3400字,阅读约需8分钟。
📝
内容提要
本文介绍了栈溢出的检测过程,通过代码示例展示了memcpy函数导致的数组溢出,进而导致栈溢出。文章详细解释了栈溢出检测的核心代码,包括判断数组是否为空、判断数组地址前四个字节是否为0CCCCCCCCh、判断数组末尾四个字节是否为0CCCCCCCCh。最后,提供了微软官方检测栈的核心代码结构图。
🎯
关键要点
-
栈溢出检测通常由编译器完成,超出范围会报异常。
-
代码示例中,memcpy函数导致数组溢出,进而引发栈溢出。
-
testFunc函数中testBuf只分配了8个字节,但memcpy赋值了30个字节。
-
汇编代码展示了memcpy的参数和调用过程。
-
栈检查函数_RTC_CheckStackVars用于检测数组的有效性。
-
核心代码中包含三个判断:数组是否为空、数组前四个字节是否为0CCCCCCCCh、数组末尾四个字节是否为0CCCCCCCCh。
-
第三个判断失败导致调用_RTC_StackFailure函数,报异常。
-
文章提供了微软官方检测栈的核心代码结构图。
➡️