超级技术:微软官方编译器对于栈的检查

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

本文介绍了栈溢出的检测过程,通过代码示例展示了memcpy函数导致的数组溢出,进而导致栈溢出。文章详细解释了栈溢出检测的核心代码,包括判断数组是否为空、判断数组地址前四个字节是否为0CCCCCCCCh、判断数组末尾四个字节是否为0CCCCCCCCh。最后,提供了微软官方检测栈的核心代码结构图。

🎯

关键要点

  • 栈溢出检测通常由编译器完成,超出范围会报异常。

  • 代码示例中,memcpy函数导致数组溢出,进而引发栈溢出。

  • testFunc函数中testBuf只分配了8个字节,但memcpy赋值了30个字节。

  • 汇编代码展示了memcpy的参数和调用过程。

  • 栈检查函数_RTC_CheckStackVars用于检测数组的有效性。

  • 核心代码中包含三个判断:数组是否为空、数组前四个字节是否为0CCCCCCCCh、数组末尾四个字节是否为0CCCCCCCCh。

  • 第三个判断失败导致调用_RTC_StackFailure函数,报异常。

  • 文章提供了微软官方检测栈的核心代码结构图。

➡️

继续阅读