Mit Adressen von Variablen im Hauptspeicher arbeiten



  • Hi,
    Ich habe eine Frage, unzwar möchte ich gerne wissen wie man mit den Adressen von Variablen arbeiten kann.
    Ich meine z.b. :

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int var;
        var = 100;
    
        cout << " Wert von var:       " << var
             << "   Adresse von var:  " << &var
             << endl;
    
        return 0;
    }
    

    Hier wird mir der Wert von der Variable var angezeigt, und seine Adresse (z.b. 0x22ff7c)
    Nun möchte ich wissen, wie ich den Wert von var, nur mit Hilfe seiner Adresse
    ändern kann.

    0x22ff7c = 50
    

    <--- geht ja nicht 😉 .
    Ich wäre froh, wenn mir jemand helfen könnte.
    mfg



  • Müsste so gehen:

    int *var = (int*)0x22ff7c; 
       *var = 50;
    


  • Danke Progchild.
    Klappt soweit wunderbar, solange das alles in einer Anwendung ist.
    Ich meine z.b.:
    Ich habe 2 Programme.In einem Programm wird die Variable var erstellt und ihr den Wert 100 gegeben.
    Das Wird dann auf dem Bildschirm gezeigt.
    Nun wartet das Programm, auf eine Eingabe des Benutzers.(Nur das dieses Programm 'ne Pause macht.)
    Nun Starte ich mein 2. Programm.Dieses verändert den Wert von der Adresse 0x22ff7c auf 50(Sollte es zumindenst).
    Dann drückt der Benutzer in dem 1. Programm enter.Damit das Programm weiterläuft.
    Es gibt jetzt nurnoch den Wert von var wider auf dem Bildschirm aus.
    Aber es Zeigt an, das var immernoch den Wert 100 hatt 😮 .
    (Sollte aber 50 anzeigen)
    Kann mir da einer Helfen?
    Hier mein Code bisher:
    Programm 1:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int var;
        var = 100;
    
        cout << " Wert von var:       " << var
             << "   Adresse von var:  " << &var
             << endl;
        system("PAUSE");
        cout << " Wert von var:       " << var
             << "   Adresse von var:  " << &var
             << endl;
    
        system("PAUSE");
        return 0;
    }
    

    Programm 2:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int *var = (int*)0x22ff7c;
        *var = 50;
        system ("PAUSE");
        return 0;
    }
    


  • Das Betriebssystem verhindert normalerweise solche manipulationen. Das klappt nur unter älteren Betriebssystemen, wie Windows 9.x.



  • Ahh, und wie funktionieren dann z.b. Game-Trainer?
    Hatte vor, ein kleinen Trainer zu Proggen.
    Ich dachte immer, die machen das mit Adressen?
    Gibt es da noch eine Andere Möglichkeit, die variable var in einem anderen Programm zu ändern?(Ohne eine .txt Datei oder sowas meine ich.)



  • Du müsstest das Programm, das du verändern willst, in den Speicherbereich deines Programms laden und ausführen. Oder du gehst über das Debugging Interface deines Betriebssystems... Leider kann ich dir nicht genau sagen, wie das geht.



  • Danke.
    Wenn wer weiß, wie man den Speicherbereich von einem Programm lädt und ausführt, wäre ich froh, wenn er es erklären würde.
    Habe außerdem noch eine Frage zu den Adressen.
    Wie kann ich alle Adressen von allen Variablen meines Programmes anzeigen?
    Und dann die Adressen nach bestimmten Werten filtern.
    Ich möchte, dass mein Programm nach einer Adresse mit z.b. den Wert 50 findet, um diesen dann zu Verändern.


Anmelden zum Antworten