Es gibt da diese tolle Webseite.
MSDN heißt die. Dort kann man dann nach
Win32-Funktionen wie
WriteProcessMemory suchen und deren Beschreibung finden. Toll oder?
Wenn man dann nur mal auf die Parameternamen guckt und sein Englisch oder ein Wörterbuch bemüht, kommen dann ganz lustige Zusammenhänge raus.
Code:
hProcess == Prozeßhandle
lpBaseAddress == Basisadresse
lpBuffer == Puffer
nSize == Größe (des Puffers in Byte)
lpNumberOfBytesWritten == geschriebene Bytes
So und dann gucken wir mal auf deinen Code:
WriteProcessMemory(HandleWindow,ptr($599C86),buf,1,temp);
Hmm, seltsam. HandleWindow? Sollte das etwa ein Fensterhandle sein? Das wäre natürlich falsch, denn dort muß ein Prozeßhandle rein (
OpenProcess etc). Der nächste Parameter riecht mir auch schon nach Problemen, weil Adressen nunmal die dumme Angewohnheit haben sich zu ändern. Ja, auch wenn es sich um das gleiche Programm handelt. Aber ab 1,6 MiB (Größe des Zielprogramms, aufgrund der Adresse) könnte die Adresse allerdings auch innerhalb des Programmabbildes liegen, dann hätte man auf Systemen ohne EMET und vor Vista eventuell Glück mit einer konstanten Adresse. Aber alles in allem ist das nicht soooo toll.
Hmm, buf ... klingt nach nem Puffer, oder? Und oben haste 1 Byte alloziert. Wenn wir also mehr als ein Byte schreiben wollen, nehmen wir? ... na? Genau! Wir nehmen sizeof(TypName) Bytes. Also für einen Float wäre das dann je nach Zieltyp sizeof(Real) oder sizeof(Extended) usw. ...
Und das tolle an temp ist, daß man ihm nach Aufruf der Funktion entnehmen kann wieviele Bytes erfolgreich geschrieben wurden.
Zusätzlich zu
ASLR ab Vista können dir noch die Integritätsniveaus deines und des Zielprozesses dazwischenfunken wenn sie sich unterscheiden. Gibt es bei
MSDN auch ganz tolle Doku zu ...
Alles in allem würde ich sagen, daß du deine Frage mit einer kurzen Webrecherche auch selber hättest lösen können. Wenn eine kurze Webrecherche nicht gereicht hätte, dann hapert's wohl am Grundwissen. Und wie sagte der
olle Schrumpelkopp zu Lebzeiten? Genau:
Lernen! Lernen! Lernen!