Einzelnen Beitrag anzeigen

Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: WriteProcessMemory & Float

  Alt 20. Nov 2010, 01:22
Es gibt da diese tolle Webseite. MSDN heißt die. Dort kann man dann nach Win32-Funktionen wie MSDN-Library durchsuchenWriteProcessMemory 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 (MSDN-Library durchsuchenOpenProcess 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 MSDN-Library durchsuchenASLR 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!
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat