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.


Anmelden zum Antworten