使用BoundsChecker检测内存泄漏
使用BoundsChecker检测内存泄漏 BoundsChecker 是一种用于检测内存泄漏的工具,它采用 Code Injection 技术来截获对内存分配和释放函数的调用。下面是 BoundsChecker 的工作原理和实现细节: BoundsChecker 工作原理: BoundsChecker 通过动态修改内存分配和释放函数的调用来截获这些函数的调用。当程序开始运行时,BoundsChecker 的 DLL 被自动载入进程的地址空间,然后它会修改进程中对内存分配和释放函数的调用,让这些调用首先转入它的代码,然后再执行原来的代码。 BoundsChecker 技术实现: BoundsChecker 采用 Code Injection 技术来截获对内存分配和释放函数的调用。它会动态修改这些函数的指令,以便截获对这些函数的调用。例如,对于 malloc 函数,BoundsChecker 会将其前三条汇编指令替换成一条 jmp 指令,原来的三条指令被搬到另一个地址处。当程序进入 malloc 函数时,先 jmp 到另一个地址处,执行原来的三条指令,然后进入 BoundsChecker 的代码。 BoundsChecker 的实现细节: BoundsChecker 会记录函数的返回地址,然后将返回地址指向属于 BoundsChecker 的代码,接着跳到原来的指令。这样,BoundsChecker 就可以记录由 malloc 分配的内存的指针,然后再跳转到原来的返回地址处。 BoundsChecker 与 DLL 的交互: 如果内存分配/释放函数在 DLL 中,BoundsChecker 则采用另一种方法来截获对这些函数的调用。BoundsChecker 会修改程序的 DLL Import Table,让 Table 中的函数地址指向自己的地址,以达到截获的目的。 BoundsChecker 的 debug 信息: BoundsChecker 通过 debug 信息来报告内存泄漏的来源。debug 信息可以帮助 BoundsChecker 确定内存泄漏的来源,也就是说当 BoundsChecker 检测到内存泄漏时,它可以报告这块内存块是哪段代码分配的。 BoundsChecker 是一种功能强大且实用的工具,用于检测内存泄漏。它可以帮助开发者快速地定位内存泄漏的来源,提高程序的稳定性和性能。