Как я могу сбросить (в Windows) пространство памяти, используемое DLL? - PullRequest
0 голосов
/ 13 июля 2010

Я могу легко сбросить все пространство памяти процесса, используя различные инструменты.

Но возможно ли сбросить только пространство памяти, используемое DLL, загруженной каким-либо процессом?Какие инструменты я должен использовать?

Спасибо,

Джим

1 Ответ

0 голосов
/ 13 июля 2010

Вы, вероятно, имеете в виду просмотр памяти, выделенной кодом в DLL.

Я думаю, что это невозможно.Если DLL выделяет память, а DLL написана на C ++, а C / C ++ Run Time динамически связан (т. Е. Как DLL), то он будет использовать тот же C / C ++ Run Time, что и основное приложение, и все DLL выделены.память будет распределяться в одной и той же куче.

Даже если в DLL будет статически привязана среда выполнения C / C ++ или библиотека написана на другом языке, она, вероятно, будет использовать ту же кучу Windows по умолчанию.

Если вы сами управляете DLL, вы можете попытаться реализовать собственный менеджер памяти для вашей DLL (в C ++ это означает переопределение новых и удаление, всего 6 глобальных операторов), попробуйте использовать другой (то есть не по умолчанию) куча Windows, а затем с помощью методов heapwalk низкоуровневого отладчика Windows WinDbg, но заставить все это работать будет довольно сложно.Или пользовательский менеджер памяти вашей DLL может выделить память по фиксированному адресу, используя VirtualAlloc (или нефиксированный, а затем зарегистрировать виртуальный адрес).Затем вы можете посмотреть на это адресное пространство в дампе памяти обычного процесса.

...