AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WriteProcessMemory & Float

Ein Thema von Muellermilchtrinker · begonnen am 19. Nov 2010 · letzter Beitrag vom 20. Nov 2010
Antwort Antwort
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#1

WriteProcessMemory & Float

  Alt 19. Nov 2010, 18:00
Hallo DP,

ich hab mal wieder eine kleine Frage zu RAM-Manipulation. Ich kann ja eine Floatdresse auslesen. Ich bekomm dann einen Wert wie 1. oder 0.
Nun will ich jetzt den Wert 1. in die Adresse schreiben. Wie mache ich das. Für Byteadressen nutze ich den Code:
Delphi-Quellcode:
GetMem(buf,1);
buf^ := Chr(2);
WriteProcessMemory(HandleWindow,ptr($599C86),buf,1,temp);
FreeMem(buf);
So schreibe ich den Wert 2 in die Adresse $599C86. Wie kann ich nur einen Floatwert wie 1. in eine Adresse schreiben.
Danke schonmal.
Chuck Norris doesn't need backups. He just uploads his files and lets the world mirror them.
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz