Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13054
  • 博文数量: 5
  • 博客积分: 219
  • 博客等级: 入伍新兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-25 22:03
文章分类

全部博文(5)

文章存档

2011年(5)

我的朋友
最近访客

分类: LINUX

2011-10-21 23:37:33

今天一头雾水,大脑一片空白,被人鄙视,实在无赖。
被人问及内存溢出如何检测,我想应该根本没办法检测,如果一个全局或者是局部数组,你读写的地址超出数组的范围,根本无法察觉。最终发问人给出结果,只要在申请内存的时候,在头尾各留一个小buff,标记flag,在free的时候检测flag,以确定是否有内存溢出。我一听,傻了,原来只是检测动态内存,自己没理解清楚,无赖。但该方法有明显的缺陷,无法检测读越界。
最后独自一人走在路上,想到了一个主义,其实使用mmap可以很简单的检测动态内存的读写越界。首先重载malloc和free,将其替换为mmap,并且保证每个mmap空间不连续,如果想检测内存尾部读写越界,则指针应该保证动态内存尾部和mmap尾部对其。如果想检测首部读写溢出,应该使动态内存的首地址和内存页面的首地址对齐。这样只要有内存越界,程序必挂,记录下coredump,这样就很容易找到内存读写溢出的地方。
天晚了,过两天补上代码。
新问题?如何检测全区变量的的续写溢出,局部变量呢?暂时我还没主义,不知道哪位大侠赐教一下。

阅读(340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~