Найти соответствие между кучей Windows и модулями - PullRequest
4 голосов
/ 27 августа 2009

Я ищу способ найти отображение между кучей и модулем, который владеет кучей. Я получаю кучу следующим образом:

HANDLE heaps[1025];
DWORD nheaps = GetProcessHeaps((sizeof(heaps) / sizeof(HANDLE)) - 1, heaps);
for (DWORD i = 0; i < nheaps; ++i) {
  // find module which created for heap 
  // ...
}

Причина, по которой я хочу это сделать, заключается в том, что в моем приложении я нахожу около 40 куч, некоторые из них являются стандартными, а другие - с кучей фрагментов. Теперь я пытаюсь выяснить, какой модуль использует какую кучу.

Большое спасибо!

Ответы [ 2 ]

6 голосов
/ 27 августа 2009

Согласно документации MSDN , вызов GetProcessHeaps дает вам дескрипторы для всех куч в текущем процессе, а не для всех куч в системе, поэтому нет сопоставления с другими процессами.

2 голосов
/ 28 августа 2009

Добавьте вызов CreateHeap в самое начало вашей программы и установите для него точку останова. Запустить. Шаг в вызов (переход на уровень разборки). Установите новую точку останова. Теперь продолжайте, и точку останова нужно нажимать каждый раз, когда создается новая куча. Стек вызовов покажет вам, откуда он пришел.

Если кучи создаются глобальными объектами, они будут происходить до main (). Вы можете покопаться в коде запуска C, чтобы установить точку останова еще раньше.

...