Базовый адрес, который я нашел для области памяти в приложении, был в синтаксисе "application_name.exe" + 0007856
(<- или любой другой номер, это только пример). У меня вопрос, как мне найти адрес для "application_name.exe"
в С ++? Я не уверен, но этот метод я использовал:
HANDLE proc_handle = OpenProcess(//parameters go here to open the process);
void * base_add = (void*)proc_handle; //to store the address of the process
Если этот метод верен, ответ на первый вопрос о том, как получить адрес приложения, приводит меня ко второму вопросу: поскольку базовый адрес для конкретной области памяти был "application_name.exe" + 0007856
Могу я просто сделать это?
DWORD specific_memory_base_add = (DWORD)base_add + 0x0007856
Могу ли я использовать адрес, который я нашел из "application_name.exe"
и добавить его в 0x0007856
с помощью +
? Я попробовал это, и это не сработало. Если это не правильно, каков правильный метод?
Получение базового адреса модуля в другом процессе требует перечисления модулей процесса и извлечения имен модулей, чтобы найти совпадение.
Перечислить модули, загруженные в вызов процесса EnumProcessModules
. Как только у вас есть список модулей, позвоните GetModuleBaseName
для каждого модуля найти тот, который вы ищете (application_name.exe). HMODULE
для этого модуля указатель (в адресном пространстве целевого процесса) на начало модуля, его базовый адрес. Вы можете использовать это, чтобы добавить свое смещение.
Предполагая, что вы говорите о Windows (если вы пометили winapi
?) вы можете получить базовый адрес загруженного модуля с GetModuleHandle()
. У модуля нет базового адреса, пока он не загружен (хотя компоновщик может указать предпочтительный базовый адрес, загрузчик не должен использовать / соблюдать это).