[C++]Einfacheres MemoryWrite/MemoryRead

10/05/2010 17:29 Zulman#1
Hi,

ich hab hier mal zur Übung/aus Langeweile zwei Funktionen geschrieben, die das Lesen bzw. Schreiben einer Speicheradresse vereinfachen. Ist nichts besonderes und ich denke viele haben das bestimmt schon, aber vllt kann es ja der ein oder andere gebrauchen. Falls ihr Verbesserungsvorschläge habt, immer her damit ;)

Hier die Funktion, die einen Wert schreibt:
Code:
bool MemoryWrite(LPWSTR fensterName, unsigned address, int value){
	HWND fensterHandle;
	fensterHandle = FindWindow(0,fensterName);
	HANDLE processHandle;
	DWORD id;

	if (!fensterHandle) 
	{
		return false;
	} else {
		GetWindowThreadProcessId(fensterHandle, &id);
		processHandle = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, false, id);
		fflush(stdin);
		WriteProcessMemory(processHandle, (LPVOID) address, &value, sizeof(int), NULL);
		return true;
	}
}
und hier die Funktion, die den entsprechenden Wert der gewünschten Adresse zurückgibt:
Code:
int MemoryRead(LPWSTR fensterName, unsigned address){
	int value;
	HWND fensterHandle;
	fensterHandle = FindWindow(0,fensterName);
	HANDLE processHandle;
	DWORD id;

	GetWindowThreadProcessId(fensterHandle, &id);
	processHandle = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ , false, id);
	fflush(stdin);
	ReadProcessMemory(processHandle, (LPVOID) address, &value, sizeof(int), NULL);
	return value;
}
Ich hoffe, ich kann euch damit evtl. wenigstens 1-2 Minuten Arbeit ersparen ;)

mfg
Zulman
10/05/2010 17:45 MrSm!th#2
und was machst du bei float werten? was machst du bei texten? was machst du, wenn du keinen fensternamen sondern nur ne PID hast?
was macht man, wenn man ne dll hat?

also ich finde wrapper für sowas nicht so schön, da sie meist das verständnis, wie es denn wirklich abgeht, einfach zerstören :<
und wirklich gelungen ist er dazu auch nicht...

ach ja, ans ende gehört
Code:
CloseHandle(processHandle);
und du solltest nicht nur das Fensterhandle prüfen, sondern auch das Prozesshandle und bei beiden Funktionen solltest du zurückgeben, ob es geklappt hat oder nicht und nicht nur bei der ersten.
10/05/2010 18:37 Bot_interesierter#3
[Only registered and activated users can see links. Click Here To Register...]
10/07/2010 17:48 Lazeboy#4
mhh ich dachte man umschreibt ReadProcessMemory oder Write.....
mit memcpy und diesen befehlen so hab ich das gemacht.
10/07/2010 17:50 Fettbraten#5
Wow, super schnipsel, danke dir vielmals, die anderen die ich gesehen hatte waren riesig ;)