Получить модуль владельца по адресу памяти
Я перебираю свою память процесса с помощью VirtualQuery, я хотел бы знать, кому принадлежит определенный диапазон памяти. Либо исполняемый файл, либо какой-нибудь другой dll, и получите его имя.
Есть ли способ, которым я могу узнать?
1 ответ
Да, значение дескриптора модуля в Windows - это просто базовый адрес выделения виртуальной машины для модуля.
Таким образом, вы можете привести MEMORY_BASIC_INFORMATION.AllocationBase, к которой вы вернетесь (HMODULE), и передать его в GetModuleFileName(). Конечно, имейте в виду, что это работает только для выделений, которые были сделаны для кода, загруженного из исполняемых файлов. Обычно вы сталкиваетесь с большим количеством выделенных виртуальных машин с помощью VirtualQuery(), которые представляют собой данные или стеки. Они не имеют владельца и не связаны с модулем.