Speichermanipulation in C++



  • Hey! Ich habe gerade ein kleines Problem:

    Ich versuche gerade ein C++ Programm zu schreiben, welches die Integer Werte andere Programme manipuliert.

    So sieht's bis jetzt aus:

    #include <iostream>
    
    int main()
    {
           int addr;
           int *i = reinterpret_cast<int*>(0x7ffc059c07cc);
           std::cout << "Speicheradresse: " << i << std::endl;
           int val = 0;
    
           while(true)
           {
                   std::cout << "Wert von " << addr << "(" << *i << ")? ";
                   std::cin >> val;
                   *i = val;
           }
    }
    

    Das klappt eigentlich recht gut, die Speicheradresse wird immerhin gesetzt (Die angegebene Adresse ist ├╝brigends von nem aktuellen Programm von mir ­čśâ ).
    Jedoch wenn ich versuche den Wert zu setzen, verl├Ąsst das Programm mich mit einem...

    segmentation fault (core dumped)   ./test
    

    Hat jemand eine Idee dazu?



  • Lern erst mal, was virtueller Adressraum ist, und was er f├╝r Prozesse bedeutet.

    Dann sei dir dar├╝ber im Klaren, dass solange ASLR nicht deaktiviert ist, sich der Wert mit jedem Start des fremden Prozesses an einer anderen Stelle befinden kann. Und ASLR m├Âchtest du in der Regel nicht deaktivieren.

    Und wenn du das geschafft hast, dann darfst du nachschauen, wie process_vm_readv funktioniert.


Log in to reply