2020-12-01 Heap Corruption

本文详细介绍了Heap Corruption的概念,阐述了其带来的危害,如难以排查的问题。PageHeap作为检测Heap Corruption的工具,通过在内存块前后添加额外信息进行越界写的检测。文章还介绍了PageHeap的Full模式和Normal模式及其使用方法,并提到了其他相关工具如Application Verifier。最后,提出了预防Heap Corruption的编程实践,如使用Klocwork静态代码检查和安全函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Heap Corruption

 堆破坏是内存破坏的一种,简单来说就是由于程序的错误导致堆内存被意外改写,典型的情况包括:

  1. 申请了N个Bytes的内存,却试图写入> N个Bytes的内容;
  2. 向已经释放的内存位置写入内容;

fFrameSize = pSearch01To - fpBuffer;    // 在某种情况下会出现fFrameSize = 0xFFFFFFFC
memcpy(fTo, fpBuffer, fFrameSize);      // 这里memcpy会发生什么?

Heap Corruption的危害

把不属于自己的内存块的内容改写掉,危害是很显然的。更要命的是,Heap Corruption的问题往往很难排查,因为:

  1. 每次运行表现出来的现象可能不一样;
  2. Debug版和Release版表现可能不一样;
  3. 问题暴露的地方和问题引入的地方可能相差很远,两者逻辑上没有必然联系;

PageHeap检测Heap Corruption的原理

PageHeap工具可以在运行时检测Heap Corruption,其基本原理是在我们分配的内存块前后加上一些额外信息,这些额外信息用以检测是否出现越界写的情况。PageHeap分为Full模式和Normal模式:

  1. Full模式:在我们分配的每个内存块尾上加一页non-accessible page。Full模式的好处是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值