Kann man eine bereits ausgelesene Adresse einer Variable in einer anderen speichern?, wenn ja wie???



  • hallo ich hätte da mal ne frage, also ich hatte mich frueher mal mit den Tools TSearch & Trainer Maker Kid beschäftig. wer sie nicht kennt, dies sind so tools mit den man kleine Cheatprogs erstellen kann: mit TSearch kann man nach Adressen suchen und mit den TMK kann man sie verarbeiten), also sagen wir ich speile Tetris und suche mit TSearch nach der Adresse der Punkte, diese sei z.B. 1A089C2 -> nun kann ich ein Fenster mit dem TMK erstellen mit einem button drauf welcher beim klicken die Punkte um 5000 erhöht ect.

    soviel zur vorgeschichte, nun zu meinem anliegen ich will nun mit so einer ermittelten Adresse arbeiten, in dem ich die in eine Variable Speichere auf der ich dann später einen pointer zeigen lasse um den wert der Adresse zu erhöhen. vieleicht noch einmal meine vorstellung im ueberblick:

    TSearch liefert die adresse fuer die Punkte Variable in Tetris = 1A2B3C4
    
    	-> int _pkt = 0;
    	-> int *p = 0;
    
    nun soll die Adresse in _pkt
    
    	-> _pkt = 1A2B3C4;
    
    	-> p = &_pkt;
    
    	-> *p += 5000;
    
    dass alles bring ich dann noch in ein WinFenster unter mit button und so, und wenn ich dann tetris
    spiele und dieses prog dann aufrufe könnt3e ich im hintergrund per knopfdruck die Punkte erhöhen.
    Bzw per Hot-Key.
    

    also das ist also meine vorstellung, also koennt ihr mir sagen ob ich das so machen kann oder vllt. etwas anders. also meine hauptfrage ist eigentlich:
    Wie bekommt man eine bereits ermittelte Speicheradresse in eine Variable, die man dann per pointer verändfert?. fuer hilfe bin ich sehr dankbar.



  • Was funktioniert denn bei dir nicht ??

    int* addresse = (int*)0x123456;
    //oder 
    int* adresse = reinterprete_cast<int*>(0x123456);
    


  • Um eine Adresse zu speichern, nimmst du am besten einen Zeiger. Denn genau dafür sind Zeiger nunmal da.
    Und falls du einen Ganzzahltypen brauchst, um zB beliebig zu addieren und subtrahieren (was allerdings auch mit Zeigerarithmetik möglich ist), dann nimmst du am besten den Typ ptrdiff_t. int ist jedenfalls nicht dafür geeignet.



  • muss man 0x immer vor die adresse schreiben?
    also 0x123456 und nicht nur 123456 ???



  • Hallo

    0x123456 = hexadezimal
    123456 = dezimal

    das ist also nicht dasselbe. Der Compiler nimmt beides, im Speicher ist sowieso alles nur binär. Aber im Quellcode soltest du das nicht verwechseln.

    bis bald
    akari



  • also ich hab mal was fuer MineSweeper versucht und mir die Zeit Speicheradresse besorgt. hab mir des ganze so vor gestellt ich habe MineSweeper laufen und will dann folgenden Code Compilieren

    #include <iostream>
        using namespace std;
    
    int main(int argc, char* argv[]) {
    
        int Punkte = 5000;
        int *_pkt = (int*)0x100579C;    // 100579C ist bei die Speicheradresse
                                        // von MineSweeper
        cout  *_pkt << endl;            // hier gibts nen Error
    
        getchar();
        return 0;
    }
    

    wieso kommt da dieser fehler? eigentlich muesste er mir doch die momentane zeit angeben oder?



  • Hallo

    1. Es gibt keine festdefinierte Speicheraddressen von Programmen. Damit ist

    100579C ist bei die Speicheradresse von MineSweeper

    schon Unsinn.

    2. Selbst wenn du zur Laufzeit eine korrekte aktuelle Adresse hättest, würde Windows (ab NT) verhindern das ein anderes Programm so einfach darauf zugreift. Es würde also zu Speicherzugriffsverletzung kommen.
    Außerdem glaube ich mich zu erinnern, das die Speicherangaben eh relativ vom Programm sind, so das ein und derselbe Integerwert von Mineswepper und von deinem Programm aus nicht zu der gleichen physikalischen Adresse führt.

    bis bald
    akari



  • hmmm aber die Adresse bleibt doch immer gleich jedes mal wenn ich nach ihr suche finde ich die gleiche adresse und mit TSearch dann ich ja die werte auch verändern... also muss das ja auch mit ner billigen consolen anwendung funktionieren -.-....





  • T0bi schrieb:

    cout  *_pkt << endl;            // hier gibts nen Error
    

    ..irgendeinen Error?



  • danke fuer die links schaut so aus als waere es das was ich brauche, werds mir alles mal anschaun und ausprobieren, werd dir dann später noch ein feedback gebenn, danke

    @error, also es laesst sich einwandfrei testen keine fehler werden angezeigt und so... doch bei der ausführung gibts nen fehler.... kA was da alles drin stand von wegen die adresse is doof oder so



  • hmm super das Tut ist klasse jetzt funktioniert auch alles 🙂 danke


Anmelden zum Antworten