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