来由是这样的,我怀疑目标进程有可能有内存泄露,但不允许调试,我就用vmmap来看进程地址空间,每隔2小时看一次,隔一阵,发现多了一些private空间,如下
6B040000 Private 21,600 44 28 28 22 Read/Write 6B040000 Private 4 4 4 4 Read/Write 6B041000 Reserved 3,276
.................
................
然后我自己写了一个程序用ReadProcessMemory把 6B040000 的头4k字节抓出来,初步分析,有如下
6b040000 08 00 00 00 00 01 00 0c-ee ff ee ff 00 00 00 00
6b040010 00 00 2a 00 00 a0 37 00-00 00 04 6b 18 15 00 00
开始怀疑ffeeffee是HEAP_SEGMENT,再看到后面字节002a0000就证实怀疑了,
002A0000 Heap (Private) 64 64 64 64 1 Read/Write Heap ID: 4
我用userdump抓了目标进程的内存映像,然后分析下面这个内存,果然如此
Heap entries for Segment12 in Heap 002a0000 6b040000: 00000 . 00040 [01] - busy (40) 6b040040: 00040 . 00fc0 [10]
现在我非常想知道的是哪个线程在使用这个heap,我该如何查找?目标进程线程100多个,我不可能每个堆栈里面去搜索吧,还有我该搜索哪个dword,是6b040000?还是6b040040?还是002a0000?
另外,目标进程知道是用c++写的,调用了new来分配,没有直接调用Heap相关api,只是没有目标进程的代码,请指点哈
|