最近有个这样的需求,就是在不能获取dll源码情况下来检测该dll的内存泄漏。并且该dll是release下的版本,链接了release版的CRT。由于不能获取源码,就不能重新编译,比较好的解决方案就是hook api。寻思这事儿肯定有人干过,搜了一下在code project上真有。收藏一下:
http://www.codeproject.com/Articles/150463/LeakMon-Track-Handle-leak-GDI-Leak-and-Memory-Leak
http://www.codeproject.com/Articles/175591/LeakMon-Part-2-Under-the-hood
基本原理是hook api,打印call stack,然后用dbg helper根据pdb解析成能看的call stack。