推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

栈溢出检测常见疑问与方案对比

资料介绍

栈溢出检测的十个常见疑问解答 1. 对比背景 1.1 问题引入 栈溢出是嵌入式系统最隐蔽、也最致命的软件故障之一。程序跑着跑着突然跑飞,或是变量莫名被改写,很多情况下都是栈越界惹的祸。我们来看,栈溢出的本质是函数调用和局部变量消耗的栈空间超过了分配给它的内存区域,导致越界写入,破坏相邻数据。 1.2 检测方案概览 针对栈溢出,业界形成了两大主流检测思路:一类是软件栈检查(方案A),一类是硬件栈指针监视(方案B)。我们来看这两类方案各自的门道,再做对比选型。 2. 方案A特点 2.1 原理与实现 方案A软件栈检查,通常采用"栈填充标记 + 周期巡检"的办法。系统启动时在栈顶区域填充固定的标记字节(如 0xAA),运行中周期性地检查这些标记是否被破坏,一旦发现异常即判定栈溢出。 2.2 优势与局限 方案A实现简单、无需额外硬件,几乎零成本。局限是检测具有滞后性,要等栈破坏已经发生、标记被改写后才能发现,且无法精确定位溢出点。我们来看,它对栈顶附近的破坏较灵敏,但深处越界则可能被漏过。 3. 方案B特点 3.1 原理与实现 方案B硬件栈指针监视,利用 MPU(内存保护单元)为栈区设置访问边界,一旦栈指针越界访问受保护区域,硬件立即触发异常。这种检测实时性强,越界瞬间就能被捕获。 3.2 优势与局限 方案B能即时发现溢出、精确定位越界地址,实时性和准确性都优于方案A。局限是需要芯片支持 MPU,且配置与调试复杂度较高,对资源紧张的 MCU 会带来额外开销。 4. 关键指标对比 我们来看,把两种方案的各项指标摆在一起对比,方便决策。

部分文件列表

文件名 大小
栈溢出检测常见疑问与方案对比.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载