Как написано там (^), у меня проблема с C ++ и WriteProcessMemory (). Я открыл Windows-Calc.exe, запомнил номер и открыл CheatEngine. Я нашел номер (изменил его и т. Д.) И поместил его в эту программу:
(Примечание: я немец; «Рехнер» равен «Калькулятор»)
#include <iostream>
#include <Windows.h>
using namespace std;
int main (){
int Value = 500;
HWND hWnd = FindWindow(0, L"Rechner");
if (!hWnd) {
cerr << "Can't find window" << endl;
return 0;
}
DWORD PID;
GetWindowThreadProcessId(hWnd, &PID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if (!hProcess) {
cerr << "Process handle error" << endl;
return 0;
}
int iSuccess = WriteProcessMemory(hProcess, (LPVOID)0x899FC6F60C , &Value, (DWORD)sizeof(Value), NULL);
int i = 0;
while (iSuccess == 0){
i = i+1;
cerr << "Failed " << i << " Error: " << GetLastError() << endl;
iSuccess = WriteProcessMemory(hProcess, (LPVOID)0x899FC6F60C , &Value, (DWORD)sizeof(Value), NULL); //Here all begins
}
clog << "Done" << endl;
CloseHandle(hProcess);
return 0;
}
Окно найдено, процесс найден (ошибок нет ..) Но затем строка «// Здесь все начинается» возвращает 0 и устанавливает GetLastError () равным 487. Как и все следующие.
Если вы знаете, что я сделал неправильно, опишите, пожалуйста, дружелюбный подход, я начал C ++ вчера.
Видеть это ссылка на сайт для описания того, что означают коды GetLastError.
В этом случае ERROR_INVALID_ADDRESS
, Попытка получить доступ к неверному адресу.
Это связано с тем, что вы пишете по «случайному» адресу памяти. Вы не можете просто взять число и надеяться, что в этом процессе будет память по этому адресу.