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: 7

    Kann 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");
    }
    




  • 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.


Anmelden zum Antworten