Pointer in c++

01/23/2012 22:58 republicaner#1
Wie kann man in c++, die Adresse, auf die der Pointer und Offset zeigen, auslesen und reinschreiben? Wenn ich die Pointer Adresse und offset addiere und in diese Adresse schreiben will, klappt es nicht, also muss ich irgendwie die Adresse, auf die der pointer immer zeigt, auslesen und speichern, um in diese dann zu schreiben, aber wie mach ich das? Sry bin noch noob in C++.
01/23/2012 23:04 Dr. Coxxy#2
erst sprache lernen, dann "hacks" in der sprache coden.
01/24/2012 06:00 jacky919#3
int* ptr = reinterpret_cast<int*>(0xADDRESSE + 0xOFF);
01/24/2012 08:22 Tyrar#4
Quote:
Originally Posted by jacky919 View Post
int* ptr = reinterpret_cast<int*>(0xADDRESSE + 0xOFF);
zugriff dann mit
Code:
*ptr=0x13371337
ne andere möglichkeit wäre:
Code:
*(int*)(0xADDRESSE+0x0FF)=0x13371337
01/24/2012 16:03 jacky919#5
Das funktioniert natürlich auch.
Ich wollte nur keine C-Casts benutzen (siehe Threadtitel) :)
01/24/2012 16:58 MrSm!th#6
Jackys beispiel ist falsch

Edit:
Nein beide.
01/24/2012 17:02 jacky919#7
Inwiefern?
01/24/2012 17:37 ●ROBBY●#8
Da ich mal annehme du willst einen Hack schreiben brauchst du WriteProcessMemory (bei nem externem Programm) oder Memcpy (bei ner DLL). (Geht natürlich auch noch nen bisschen anders aber das sind afaik die meistverwendeten Wege)

Alles weitere steht auf Msdn.
01/24/2012 17:44 jacky919#9
Quote:
Originally Posted by ●ROBBY● View Post
Da ich mal annehme du willst einen Hack schreiben brauchst du WriteProcessMemory (bei nem externem Programm) oder Memcpy (bei ner DLL). (Geht natürlich auch noch nen bisschen anders aber das sind afaik die meistverwendeten Wege)

Alles weitere steht auf Msdn.
Warum willst du memcpy benutzen?
01/24/2012 17:53 ●ROBBY●#10
Weil es wenn man schon im Prozess ist, einfacher zu benutzen ist als WriteProcessMemory.
Hab aber erst einmal mit Memcpy gearbeitet also kenne ich mich damit nicht so gut aus.
01/24/2012 17:55 Dr. Coxxy#11
wenn du alles "richtig" machst, kannst du auch einfach den zuweisungsoperator '=' benutzen.
(in ner dll...)
01/24/2012 17:55 jacky919#12
Du kannst doch direkt auf den Speicher zugreifen, wenn du dich schon im Prozess befindest.

Edit: Mist, diesmal war Dr. Croxxy schneller :)
01/24/2012 20:11 MrSm!th#13
Weil ihr das Offset zur Adresse addiert, allerdings gehört das Offset auf den Wert an der Adresse addiert, schließlich ist es ein Pointer!

Code:
int *ptr = reinterpret_cast<int*>( *(DWORD*)0xAdresse + 0xOffset );
wäre richtig, bzw. mit einem weiteren reinterpret_cast, um es noch schöner zu machen.
01/24/2012 20:43 jacky919#14
Ich wollte auch nur zeigen wie man generell eine Addresse aus zwei Ganzzahlen macht, ohne Dereferenzierung.
01/24/2012 23:14 republicaner#15
Hab es jetzt so gemacht wie MrSm!th es gemacht hat, allerdings bekomme ich eine Fehlermeldung, wenn ich die exe starte und sie schließt sich sofort.