Я попытался получить базовый начальный адрес из этого исполняемого файла с помощью openprocess, но я продолжаю падать, когда запускаю код, и я действительно не вижу в этом ничего плохого.
HMODULE GetModule(HANDLE han)
{
HMODULE hMods[1024];
int i;
DWORD cbNeeded;
char szProcessName[MAX_PATH] = "Minesweeper.exe";
EnumProcessModules(han, hMods, sizeof(hMods), &cbNeeded);
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
TCHAR szModName[MAX_PATH];
GetModuleFileNameEx(han, hMods[i], szProcessName, sizeof(szModName));
//printf(TEXT("\t%s (0x%08X)\n"), szModName, hMods[i]);
if (szModName == szProcessName)
{
cout << "FOUND" << endl;
}
}
return 0;
}
GetModuleFileNameEx
измеряется в символах, а не в байтах, поэтому для этого не следует использоватьsizeof
. В сборке Unicode это может привести к сбою. - person Ben Voigt   schedule 07.01.2016szModName
(третий и четвертый параметрыGetModuleFileName
используют разные переменные), и вы не можете сравнивать строки в стиле C с==
, вам нуженstrcmp
. - person Ben Voigt   schedule 07.01.2016strcmp
возвращает ZERO для совпадения и ненулевое значение в противном случае. Кроме того, вам может понадобиться совпадение подстроки, а не равенство? - person Ben Voigt   schedule 07.01.2016TCHAR
, поэтому вы должны писать правильный код относительно количества символов. - person PaulMcKenzie   schedule 07.01.2016