### DUMA 介绍 ###
DUMA是一个开源的库,用来检测C/C++程序中缓冲区是否溢出。
这个库是由Buce Perens 写的Electric Fence库的一个字库,另外添加了一些功能。
它可以帮助程序员检测到一些通常的程序bugs:
--- 超过一个动态分配内存缓冲的头或者尾。
--- 在返回一个动态分配的缓冲到堆中后使用了它。
--- 检测内存泄漏。
--- 检测分配/回收不匹配功能:例如.使用malloc()分配,但是用操作符delete回收。
### 特点 ###
不像其它malloc()调试器,DUMA既支持检测写访问也能检测读访问,并且它会精确的定位到出现错误的那条指令。
在每个内存分配之前(或者之后,可以由用户设置),DUMA使用你计算机上的虚拟内存硬件来建立一个不可访问的内存页。当程序对
这个不可访问的页进行读或者写的时候,硬件会发出一个segmentation fault(越界错误),在出现问题的指令行的地方停止运行。使用
你比较熟知的调试器来找到错误的状态信息是非常繁琐的。类似的方式,以free()方式释放的内存也被设置为不可访问,任何试图接触
它的代码都会得到一个segmentation fault。
### 功能 ###
--- 重载所有标准的内存分配函数,包括 malloc(),calloc(),memalign(),strdup(),operator new ,operator new[]和它们
对应的回收函数。
--- 使用CPU的MMU(内存管理单元):分配并保护一个额外的内存页来检测任何超过内存首尾的非法访问。
--- 精确的定位到访存出错的那条指令;在回收内存块的时候,检测在内存块的非保护区末尾的错误的写操作。
--- 检测内存分配和回收的调用是否匹配。
--- 内存泄漏检测:检测到程序结束后还没有释放的内存块。
--- 库的预加载。
--- 在不需要改变源代码或者重编译的下就可以测试。