Я пытаюсь использовать рутину FP, но она не работает ... Почему? Это мой код:Ошибка управления памятью
int output = FindPattern(0x0042A000, 0x2000, "\x68\x00\x00\x00\x00\xFF\x76\x08\x89\x46\x44", "x????xxxxxx");
if (output > -1) {
ReadProcessMemory(hProcHandle, (PVOID)address, &value2, sizeof(value2), NULL);
}
Function:
int FindPattern(int start_offset, int size, const char * pattern, const char * mask)
{
int pos = 0;
for (int retAddress = start_offset; retAddress < start_offset + size; retAddress++)
{
if (*(const char*)retAddress == pattern[pos] || mask[pos] == '?')
{
if (mask[pos+1] == '\0')
return retAddress+1;
pos++;
}
else
pos = 0;
}
return -1;
}
Я также попытался:
DWORD output = FindPattern(hProcHandle, "\x68\x00\x00\x00\x00\xFF\x76\x08\x89\x46\x44", "x????xxxxxx");
bool VerifyAddress(HANDLE hwnd, DWORD dwAddress, char *bMask, char *szMask)
{
PBYTE *pTemp = { 0 };
for (int i = 0; *szMask; ++szMask, ++bMask, ++i)
{
if (!ReadProcessMemory(hwnd, reinterpret_cast<LPCVOID>(dwAddress + i), &pTemp, sizeof(pTemp), 0)){
return false;
}
if (*szMask == 'x' && (char)pTemp != *bMask){
return false;
}
}
return true;
}
DWORD FindPattern(HANDLE hwnd, char* bMask, char *szMask)
{
for (DWORD dwCurrentAddress = 0x4FFFFFF; dwCurrentAddress < 0x7FFFFFF; dwCurrentAddress++){
if (VerifyAddress(hwnd, dwCurrentAddress, bMask, szMask)) {
return dwCurrentAddress;
}
}
Но с этими кодами я всегда
Необработанное исключение в 0x01034BB1 в program.exe: 0xC0000005: Access место для считывания ошибок 0x02343DA2.
Кроме того, вы смешиваете 'int' и' char * '. Используйте тип memsize, когда вы имеете дело с указателями, иначе он рано или поздно сработает. 'int val = (int) address' не получается, потому что адрес не подходит в' val' в 64-битных системах. – HelloWorld