Это могут быть прямые звонки на VirtualAlloc
.Попробуйте изолировать тип памяти, используя !address -summary
.А еще лучше, найдите копию vadump.exe из старого набора ресурсов.Это дает более читабельную разбивку.
Вы можете получить некоторые подсказки, если проанализировать результаты двух запусков команды WinDbg !vadump
, а затем сбросить часть недавно выделенной оперативной памяти.Если у вас есть файлы символов и вы выгружаете ОЗУ с помощью команды dps
, WinDbg отобразит совпадения символов для каждого DWORD.Другими словами, если у значения есть имя в файле символов, вы увидите его.Хорошим примером этого является дамп объектов C ++ с VTables.VTable имеет символ, так что вы увидите, какой он.
И последнее, но не менее важное: вы можете установить точку останова на VirtualAlloc
и выгружать стек для каждого вызова.Даже при отсутствии строгого сравнения между распределениями и освобождениями, вы можете заметить интересный стек вызовов или размер выделения.Синтаксис точки останова для выгрузки стека и продолжения:
bp kernel32!virtualalloc "kb;g"
Кроме того, укажите точку останова на VirtualAllocEx.AFAIK, большинство выделенных процессом процессов VAD должны достигать точки останова, кроме тех, которые реализованы в ядре, таких как сопоставления файлов (CreateFileMapping / MapViewOfFile) и, возможно, LoadLibrary
.