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

После того, как я успешно ввел свою dll в целевой процесс, скажем «target.exe», как я могу получить базовый адрес «target.exe»?

Я пробовал GetModuleHandle (0) и GetModuleHandle («target.exe»), но это не так, и я не уверен, как отлаживать. Я пытался напечатать это так:

//retrive target's base address
DWORD EXEBaseAddr = (DWORD) GetModuleHandle((LPCWSTR)"target.exe");
std::stringstream sstr;
sstr << EXEBaseAddr;
std::string str = sstr.str();
String^ str3 = gcnew String(str.c_str());
baseAddressLBL->Text = str3;

Мне пришлось снова привести его в конце, потому что я использую форму Windows (не уверен, так ли это называется), чтобы напечатать адрес в моем интерфейсе.

2

Решение

Вы используете широкую версию GetModuleHandle (Т.е. GetModuleHandleW), таким образом, вы должны передать ему правильную широкую строку Ваша ошибка в том, что вы преобразуете неширокую строку в широкую строку, которая не будет работать. Вместо этого используйте следующее:

(DWORD)GetModuleHandleW(L"target.exe");

Или следующее, которое выполняет то же самое:

(DWORD)GetModuleHandleA("target.exe");
1

Другие решения

GetModuleHandle(NULL);
действительно получает идентификатор текущего запущенного процесса;) поэтому, если ваш код выполняется внутри процесса target.exe, вы должны получить идентификатор процесса с помощью этого вызова API, вы уверены, что смогли успешно внедрить dll и выполнить вызов? к вашему коду?

если вы уверены, что ваш код работает, вы можете попробовать использовать GetCurrentProcessId(); функция это получает идентификатор вызывающего процесса 🙂 больше об этом на MSDN

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683180(v=vs.85).aspx

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector