Zeiger erhöhen
-
hi ptr++; <-- dadurch lass ich ja den Zeiger auf eine Adresse zeigen welche 4 Byte weiter ist als die Adresse wo vorher drauf gezeigt wurde.
Beispiel:
ptr liegt im Speicher an Adresse: 0x123
ptr zeigt auf -> 0x1 Wert an der Adresse: 9
ptr++
ptr zeigt auf -> 0x5 Wert an der Adresse: 7Kann man jetzt auch noch die Adresse von ptr ändern?
Also so das ptr jetzt nicht an Adresse 0x123 liegt sondern z.b. an Adresse 0x111 oder so?#include <iostream> using namespace std; int main(int argc, char* argv[]) { int var2 = 7; int var = 9; int *ptr = &var; cout<<"ptr liegt an Adresse: " << &ptr<<endl; ptr++; //erhöhe ptr um 4 byte und zeige auf var2 ( 1 int = 4 byte) cout<< * ptr<<endl; system("PAUSE"); }
-
http://www.c-plusplus.net/forum/218873
Gruß
Helmut
-
Ty für den Link.
Aber das ist auch nicht so ganz das was ich suche.
So wie es in dem Link stand:
int* huhu = reinterpret_cast<int*>(12345);Hier lasse ich ja auch nur einen Zeiger auf einen Wert im Speicher zeigen.
Irgendwie merke ich gerade das meine Frage dämlich war.

Ich glaube mein vorhaben kann mit Standard C++ gar nicht funktionieren.
Oder kann ich mit Standard C++ die Opcodes innerhalb von meinem Programm ändern während dieses läuft?
Im Prinzip wie ein Debugger da kann man ja auch an die verschiedenen Offsets Code schreiben.
-
Habe mich noch nicht so damit beschäftigt, aber hier einen ggf. passenden Link:
http://board.gulli.com/thread/1402473-c-pointer-eine-richtige-hexadezimaladresse-zuweisen/
Gruß Helmut
-
Ich hab mir gerade mal deinen Link angeschaut.
Aber weder ReadProcessMemory noch WriteProcessMemory ist da nützlich.
Da man auch damit keine Opcodes/Befehle ändern kann. Halt nur Werte die in Variablen stehen lesen/verändern.Ich dachte halt es könnte vielleicht mit Standard C++ mitteln gehen aber das scheint nicht der Fall zu sein.
-
increment schrieb:
Irgendwie merke ich gerade**,** dass meine Frage dämlich war.

Das ist gut.
increment schrieb:
Ich glaube mein vorhaben kann mit Standard C++ gar nicht funktionieren.
Das hat nichts mit Standard-C++ zu tun, es macht einfach keinen Sinn. Du fragst gerade danach, ob du eine gewöhnliche Variable einfach im Speicher (bzw. auf dem Stack) hin und herschieben kannst. Wenn du &ptr verändern könntest, könntest du auch die Adresse von ints, longs, floats, etc. ändern. Vielleicht wird dir ja jetzt klar, warum das keinen Sinn macht.