Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

C# Memory-Editing

No_BreaK - 32
Fortgeschrittener (offline)

Dabei seit 02.2010
47 Beiträge
Geschrieben am: 04.08.2011 um 16:19 Uhr

So, da ich im Forum keinen einzigen Beitrag dazu gefunden habe, ich im Internet nicht so richtig fündig geworden bin und sich mir immer noch die Frage stellt: "Wie lese ich bestimmte Adressen in C# aus?" möchte ich mich hier nun kundig machen: Kennt sich da jemand aus?

Ich vermute mal nein, da dieser Bereich größtenteils für Nonsens missbraucht wird.

Würde mich über Erklärungen freuen.
C oder C++ wären auch OK.


Mit freundlichen Grüßen,
No_Break.
bredator - 41
Champion (offline)

Dabei seit 03.2008
5319 Beiträge

Geschrieben am: 04.08.2011 um 16:23 Uhr

Schau dir mal den folgenden Artikel auf Codeproject an, dort wird einiges dazu erläutert, wie man die WinAPI-Funktionen nutzen kann:

Codeproject

Lache nicht über jemanden, der einen Schritt zurück macht. Er könnte Anlauf nehmen.

Bon_Scott - 37
Halbprofi (offline)

Dabei seit 05.2005
386 Beiträge

Geschrieben am: 04.08.2011 um 16:35 Uhr

Vielleicht hilft dir ja diese Seite weiter:
c-sharpcorner.com

Nur weil du nicht Paranoid bist, heißt das nicht, dass du nicht verfolgt wirst!

No_BreaK - 32
Fortgeschrittener (offline)

Dabei seit 02.2010
47 Beiträge
Geschrieben am: 04.08.2011 um 16:40 Uhr

Ach ist das toll. So viele Antworten. ;-)

@Bredator:
Danke, hat mir etwas geholfen. :-)

@Bon_Scott
Pointer zu deklarieren und auf Variablen innerhalb des eigenen Codes ist ja noch einfach.
Nur wie setze ich den dann auf eine Adresse im RAM?

So?
int* Handle = (int*) 0x0001;
Bon_Scott - 37
Halbprofi (offline)

Dabei seit 05.2005
386 Beiträge

Geschrieben am: 04.08.2011 um 16:43 Uhr

schau hier ... das müsste das sein, was du meinst:
mikrocontroller.net

Nur weil du nicht Paranoid bist, heißt das nicht, dass du nicht verfolgt wirst!

No_BreaK - 32
Fortgeschrittener (offline)

Dabei seit 02.2010
47 Beiträge
Geschrieben am: 04.08.2011 um 16:52 Uhr

Zitat von Bon_Scott:

schau hier ... das müsste das sein, was du meinst:
mikrocontroller.net


Danke!
Und jetzt nochmal für ganz Dumme wie mich:

Ich suche eine Adresse, nehme die Base weg und erhalte das Offset. Base wäre dann der Windowhandle, also ein IntPtr?

Um dann die spezielle Adresse zu erhalten nehme ich aus der Process-Klasse den Handle und addiere auf den Handle die Adresse.

Also so:
IntPtr Base = process.Handle;
int* HealthOffSet = (int*) 0x01998;
int Health = (int) (Base + HealthOffSet);

Oder halt per API-Call. :-)


Liege ich da jetzt richtig? ^^
bredator - 41
Champion (offline)

Dabei seit 03.2008
5319 Beiträge

Geschrieben am: 04.08.2011 um 16:58 Uhr

Im Wesentlichen ja.

Lache nicht über jemanden, der einen Schritt zurück macht. Er könnte Anlauf nehmen.

Bon_Scott - 37
Halbprofi (offline)

Dabei seit 05.2005
386 Beiträge

Geschrieben am: 04.08.2011 um 16:59 Uhr

Zitat von bredator:

Im Wesentlichen ja.

:daumenhoch:

Nur weil du nicht Paranoid bist, heißt das nicht, dass du nicht verfolgt wirst!

No_BreaK - 32
Fortgeschrittener (offline)

Dabei seit 02.2010
47 Beiträge
Geschrieben am: 04.08.2011 um 17:05 Uhr

Dann bedanke ich mich bei euch beiden und übergebe den Thread den Weiten des Internets!
McPommes - 51
Experte (offline)

Dabei seit 09.2006
1422 Beiträge
Geschrieben am: 04.08.2011 um 19:05 Uhr

Ich würd sagen das gehört noch gescheit gecastet. Und ein Pointer addiert meines Wissens so viele Speicherplätze wie der Typ belegt, auf den er zeigt. Also ein Pointer auf int plus eins erhöht den Pointer dann eigentlich um 4, weil ein int 4 Bytes belegt.
Musst ein bisschen damit rumspielen.

*** diese Fusszeile verschwendet 45 Bytes ***

No_BreaK - 32
Fortgeschrittener (offline)

Dabei seit 02.2010
47 Beiträge
Geschrieben am: 04.08.2011 um 19:43 Uhr

Zitat von McPommes:

Ich würd sagen das gehört noch gescheit gecastet. Und ein Pointer addiert meines Wissens so viele Speicherplätze wie der Typ belegt, auf den er zeigt. Also ein Pointer auf int plus eins erhöht den Pointer dann eigentlich um 4, weil ein int 4 Bytes belegt.
Musst ein bisschen damit rumspielen.


Und wo habe ich das nun nicht gemacht? :nixblicker:

Beim API-Call ist mir das schon klar.
McPommes - 51
Experte (offline)

Dabei seit 09.2006
1422 Beiträge
Geschrieben am: 04.08.2011 um 21:16 Uhr
Zuletzt editiert am: 04.08.2011 um 21:16 Uhr

Gecastet ist nicht ganz der richtige Ausdruck. Du berechnest bisher die Speicheradresse als int, aber du liest sie noch nicht aus.
Du musst noch auf die Speicheradresse zugreifen und das lesen was da drin steht.
So etwa
int* HealthPtr = Base + HealthOffSet;
int Health = *HealthPtr;


*** diese Fusszeile verschwendet 45 Bytes ***

No_BreaK - 32
Fortgeschrittener (offline)

Dabei seit 02.2010
47 Beiträge
Geschrieben am: 04.08.2011 um 22:14 Uhr

Zitat von McPommes:

Gecastet ist nicht ganz der richtige Ausdruck. Du berechnest bisher die Speicheradresse als int, aber du liest sie noch nicht aus.
Du musst noch auf die Speicheradresse zugreifen und das lesen was da drin steht.
So etwa
int* HealthPtr = Base + HealthOffSet;
int Health = *HealthPtr;


Oder kurz:

int Health = (int) (int*) (Base + HealthOffSet); //Wobei er mir hier sagte, er könne Operator + nicht auf int* und int* ausführen könne.

int Health = (int) (int*) ((int) Base + (int) HealthOffSet); //Hier ging es lustigerweise. ^^
McPommes - 51
Experte (offline)

Dabei seit 09.2006
1422 Beiträge
Geschrieben am: 07.08.2011 um 16:05 Uhr

Wie du schon am Fehler merkst, gehts eben doch nicht so kurz ;-)

Zitat:

int Health = (int) (int*) ((int) Base + (int) HealthOffSet); //Hier ging es lustigerweise. ^^

Du baust da auch alles ein paar mal hin und her um. Auf einen Pointer kann man wahrscheinlich nur einen int addieren, macht ja auch Sinn. Der Offset müsste also nur ein int sein, dann gehts.
Aber auch hier fehlt dir noch ein * um den Inhalt der Speicherstelle zu lesen. Bisher kopierst du nur den Pointer als int.
Wenn schon kurz, dann so

int xyz = *(Base + HealthOffSet);


*** diese Fusszeile verschwendet 45 Bytes ***

  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2026 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -