Нахождение адреса памяти загруженной DLL в процессе в C ++ - PullRequest
4 голосов
/ 13 августа 2010

У меня запущен процесс, использующий Test.dll.Я хотел бы знать точное место в памяти для запуска Test.dll в памяти, но, кажется, не могу.

Моя главная проблема заключается в том, что мне нужно записать смещение от этой DLL, но я не могу точно ввести Test.dll + некоторое смещение при использовании Read / WriteProcessMemory.

Любая помощь будет принята с благодарностью.

1 Ответ

6 голосов
/ 13 августа 2010

Хорошо, поэтому один из способов сделать это - использовать значение, возвращаемое GetModuleHandle(). Да, он возвращает HANDLE, но вы можете привести его к соответствующему типу указателя. Сравните с диапазоном адресов модуля в окне «Модули» Visual Studio, и вы увидите, что он совпадает с начальным значением диапазона.

Лучший способ сделать это - использовать GetModuleInformation () . Первое поле структуры MODULEINFO , которое вы передадите, будет содержать базовый адрес DLL.

Хотя согласно документации MODULEINFO:

Адрес загрузки модуля совпадает со значением HMODULE.

Так что я думаю, что просто используйте HMODULE, и приведение в порядке. Думаю, все, что ты захочешь сделать.

Если вы хотите получить информацию об удаленном процессе, используйте EnumProcessModules () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...