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