MrJack Mcfreder Ответов: 2

Память процесса чтения C++


Я новичок в C++, и это просто боль в заднице, чтобы найти один рабочий пример чтения памяти процесса.

Что я уже пробовал:

После нескольких часов гугления я в конце концов нашел проблеск надежды на этот код:

// ConsoleApplication4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <iostream>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	DWORD address = 0x002B45AC; // This is the address that we want to read from
	float value = 9999; // This will store our value. In my case, its an integer, which is the timer
	DWORD pid; //This will store our Process ID, used to read/write into the memory
	HWND hwnd; //Finally a handle to our window
	hwnd = FindWindow(NULL, L"minesweeper"); //Finds the Window called "Minesweeper"
	if (!hwnd) //If none, display an error
	{
		cout << "Window not found!\n";
		cin.get();
	}
	GetWindowThreadProcessId(hwnd, &pid); //Get the process id and place it in pid
	HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, pid); //Get permission to read
	if (!phandle) //Once again, if it fails, tell us
	{
		cout << "Could not get handle!\n";
		cin.get();
	}

	
	while (1)  //Forever, or until you force close the program
	{
		ReadProcessMemory(phandle, (void*)address, &value, sizeof(value), 0); //Read what is in "address" and store it in "value", then what is the size of what we are going to read which is "value",and finally the number of bytes read, but I dont care about that so I put a 0, or NULL
		cout << value << "\n"; //Display it
		Sleep(1000); //I was reading the timer which increases every second, so I made my program go through that loop every second
		//return 0;
	}
	
}


Я пытаюсь читать поплавок "ценность"из игрового процесса и вывести его на консоль. Я также пытаюсь писать для обработки памяти, так что если бы кто-нибудь мог мне в этом помочь, я был бы очень признателен!!

Спасибо,

jeron1

Я не использовал эту функцию, но возвращает ли ReadProcessMemory () false? Если да, то что говорит GetLastError ()?

MrJack Mcfreder

GetLastError() возвращает 2990, а ReadProcessMemorry () возвращает ранее объявленное значение "9999", тогда как я хочу, чтобы он считывал значение float в памяти игрового процесса.

2 Ответов

Рейтинг:
18

User 59241

Я думаю, что комментарий CPallini уместен, однако есть много примеров, которые можно найти в Google. Этот: Как использовать ReadProcessMemory в C++?[^ ведущее место здесь: Кража памяти программы[^] что может дать вам толчок.


Рейтинг:
1

CPallini

Цитата:
Я новичок в C++, и это просто боль в заднице, чтобы найти один рабочий пример чтения памяти процесса.
Это намек на то, что вы пытаетесь сделать что-то слишком сложное для ваших нынешних знаний.

Вы должны начать читать документацию: Функция ReadProcessMemory (Windows)[^], в частности, внимательно прочитайте 'Значение иЗамечания(они в основном предполагают поведение, уже предложенное джерон1).


MrJack Mcfreder

Я его уже читал! Эта документация очень посредственна и бессмысленна без практического примера.

Это правда, что я новичок в C++, но не в C#. Я просто ищу кого-то, кто поможет мне изменить мой код выше, или любое "примерное" предложение будет очень ценно.