C++ ReadMemory in dll

04/01/2012 01:17 『  』#1
Ja hallo zsm :D

Undzwar hab ich ne kleine dll geschrieben mit der ich ein spiel hacke sozusagen.
Das Value schreiben funktioniert an sich perfekt nur das value auslesen nicht.

Hab auch schon ein bisschen gegooglet aber nichts hilfreiches gefunden dafür.

Ich weiß, ich kan ReadProcessMemory benutzten, jedoch wird rpm leider erkannt und somit funktioniert das ganze nichtmehr.
Ich muss wie z.B memcpy fürs schreiben eine funktion fürs lesen herbekommen und da dachte ich das vllt ein paar von euch ne hilfe dazu hätten.

LG
04/01/2012 01:36 jacky919#2
Das Gegenstück zu memcpy wäre memset.
Du brauchst aber weder memcpy noch memset, um die Werte der Adressen auszulesen oder zu verändern.

Code:
//Speicher beschreiben
*(reinterpret_cast<T*>(addr)) = value;
//Speicher auslesen
T val = *(reinterpret_cast<T*>(addr));
T kann durch einen beliebigen Typ ersetzt werden, addr und value müssen ggf. angepasst werden.
04/01/2012 02:24 MrSm!th#3
Quote:
Originally Posted by jacky919 View Post
Das Gegenstück zu memcpy wäre memset.
Red bitte keinen Blödsinn. memcpy ist sicher nicht das Gegenstück zu memset..

@TE:

Einfach memcpy umgekehrt benutzen:

Code:
void *Addr = (void*)0xDEADBEEF;
void *Addr2 = (void*)0x1337;

int value = 1337;
int value2;

memcpy(Addr, &value, 4);
memcpy(&value2, Addr2, 4);
memcpy ist keine Funktion zum Auslesen, sondern sie kopiert Werte von einer Position zur anderen. Das geht natürlich in beide Richtungen.

Wie jacky aber schon sagte, für Speicherzugriffe auf native Datentypen wie int, float, char, etc. kannst du die direkte Pointer-Dereferenzierung von C++ nutzen und brauchst keine Funktionen.1
04/01/2012 02:43 『  』#4
Danke danke danke ihr seid echt die Besten :*
Hab das mit dem umgekehrten weg voll vergessen -_-
Soviel dazu -_-
Merci!
04/01/2012 12:47 Tyrar#5
Quote:
Originally Posted by jacky919 View Post
Das Gegenstück zu memcpy wäre memset.
Du brauchst aber weder memcpy noch memset, um die Werte der Adressen auszulesen oder zu verändern.

Code:
//Speicher beschreiben
*(reinterpret_cast<T*>(addr)) = value;
//Speicher auslesen
T val = *(reinterpret_cast<T*>(addr));
T kann durch einen beliebigen Typ ersetzt werden, addr und value müssen ggf. angepasst werden.
dazu muss ich auch noch eine frage stellen, mit den c++ casts habe ich mich bisher nur recht wenig auseinander gesetzt. was für vorteile bzw. unterschiede gibt es zwischen den verschiedenen c++ casts und c casts? (reinterpret_cast / static_cast, reinterpret_cast<int*>/(int*)?)
04/01/2012 13:00 Dr. Coxxy#6
sicherheit und angeblich bessere übersichtlichkeit.
04/01/2012 13:01 jacky919#7
[Only registered and activated users can see links. Click Here To Register...]
04/01/2012 13:11 MrSm!th#8
Du siehst beim Lesen des Codes durch die auffällige Schreibweise sofort, dass da gecastet wird (C-Casts verschwinden schnell mal), du kannst besser angeben, WAS du da castest und nach welchen Regeln das ganze geschehen darf (const, static, dynamic, reinterpret), dynamic_cast nutzt Laufzeittypprüfung.

Auch nochmal dort nachzulesen:

[Only registered and activated users can see links. Click Here To Register...]


Gerade in OOP Projekten sind C++ Casts den C Casts vorzuziehen; nicht nur wegen der besseren Auffälligkeit, die überall gegeben ist, sondern auch, weil du mit C Casts die Laufzeittypprüfung beim Casten von Zeigern auf polymorphe Objekte nicht hast.

Quote:
sicherheit und angeblich bessere übersichtlichkeit.
Nicht Übersichtlichkeit, sondern Auffälligkeit. Das interessiert einen C Coder vermutlich nicht, aber Leute, die Wert darauf legen, dass ihr Code verständlich ist, sollten zu den C++ Casts greifen :P
04/01/2012 14:02 Dr. Coxxy#9
Quote:
Nicht Übersichtlichkeit, sondern Auffälligkeit.
Quote:
Du siehst beim Lesen des Codes durch die auffällige Schreibweise sofort, dass da gecastet wird (C-Casts verschwinden schnell mal)
ich würde das als "übersichtlichkeit" bezeichnen? o.O
04/01/2012 14:39 MrSm!th#10
Quote:
Originally Posted by Dr. Coxxy View Post
ich würde das als "übersichtlichkeit" bezeichnen? o.O
Na ok, fällt jetzt wieder unter Definitionssache und ist eher unnötige Haarspalterei.