거기에 쓴 (^), 나는 C++과 WriteProcessMemory()에 문제가있다. Windows-Calc.exe를 열고 CheatEngine을 열고 저장된 번호를 저장했습니다. : 나는 (그것을 등을 변경)이 프로그램에 넣어 숫자를 발견 (참고 : 나는 독일어 해요; "Rechner"는 "계산기"같음)WriteProcessMemory()가 487을 반환합니까? 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;
}
창은 프로세스가 발견되었다 발견되었다 (오류는 없습니다 ..)하지만 "// Here all begins"라인은 0을 반환하고 GetLastError()를 487로 설정합니다. 아시다시피, 내가 잘못한 것, 멍청한 친구라고 묘사 해주세요, 어제 C++을 시작했습니다.
'487'은 (는) 잘못된 주소에 액세스하려고 시도하는 'ERROR_INVALID_ADDRESS'입니다. '0x899FC6F60C'는 계산기 프로세스에서 매핑되지 않은 것 같습니다. 그 주소는 어디에서 왔습니까? –
오류 487은 'ERROR_INVALID_ADDRESS'와 같습니다. 당신이 쓰려고하는 마법의 주소는 무엇입니까? (또는 당신은 그것이 무엇이라고 생각합니까?) – slugonamission
주소를 하드 코딩하는 것은 상당히 의심스러운 접근 방식입니다. 하나 들어, 주소 공간 레이아웃 무작위 화 기능은 그것을 무력화하도록 설계되었습니다. 그러나 가장 일반적인 실패 모드는 32 비트 프로그램에서 64 비트 주소를 사용한다는 것입니다. 따라서 실제로 0x99FC6F60C를 쓰려고합니다. 프로젝트의 플랫폼 대상을 x64로 변경하고 다시 시도하십시오. –