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.
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
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*)?)
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:
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
[Help]C# ReadMemory Function 04/21/2010 - .NET Languages - 1 Replies Hi!
I am a newbie and trying to learn the C# ReadProcessMemory function!
As a training I am trying to read the HP value in "Conquer Online" so please tell me is this code right or wrong and will it cause me problems?
note: this is a console application
the program should read the HP address then it shows the value of the address!
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;