verbietet Windows den Speicherzugriff?



  • Wenn ich mir jetzt einen Pointer auf eine Stelle im Speicher besorge ...
    int *a = (int *)0xAABBCC;
    ... kann ich nicht den Inhalt an dieser Stelle auslesen. Wenn ich mir z.B. mit ...
    *cout<<a;
    ... den Inhalt anzeigen lassen will bringt mir Windows beim Ausführen des Programms eine Fehlermeldung und bricht es ab. Was kann ich da tun?



  • Das ist doch vollkommen richtig?
    Du hast nix im Speicher anderer Programme zu suchen!

    Wenn du Informationen willst stell konkrete Fragen
    zu dem was du eigentlich damit bezweckst.



  • Doch es gibt Windowsfunktionen die dir Erlauben Zugriff auf einen bestimmten Speicherbereich par Adresse zu bekommen ... ist allerdings WinAPI ...



  • Du stellst dir das da viel zu einfach vor Speichermanagement ist heute ein wichtiger und komplexer Teil eines Betriebsystems. Jedes Programm hat seinen eigenen virtuellen Adressraum, wenn du auf den Speicher anderer Programm zugreifen möchstest kannst du Windows „fragen" ob es dir den fremden Speicher in deinem Adressraum abbildet.

    Hier erfährst du erstmal mehr zur MMU: http://de.wikipedia.org/wiki/Memory_Management_Unit



  • Eigentlich wollt ich da nurmal bissel rumspielen, zu lernzwecken. Ich hab z.B. gelesen, dass der Code der zuletzt gedrückten Taste an 'ner festen Position im Speicher liegt und den wollt ich dann mal auslesen.
    Und für einige andere Sachengibts ja wohl auch feste Speicheradressen, hab ich gelesen. Das wollt ich mir halt alles mal anschauen.



  • Wenn du in deinem C++ Programm einen Pointer dereferenzierst, folgst du einer virtuellen Adresse. Das Programm hat mehrere Segmente, zum Beispiel ein Text-Segment, ein (oder mehrere) Stack-Segment, ein Heap-Segment, ... Jedes Segment ist logisch gesehen zusammenhängend und reicht von 0 bis Größe-1. Die MMU wandelt diese virtuelle Adresse dann in eine physikalische um, worauf du mit deinem Programm gar keinen Einfluss hast, denn die MMU wird vom Betriebssystem konfiguriert.

    Du hast also keine Möglichkeit, direkt auf irgendeine bestimmte "echte" Adresse zuzugreifen, da der Speicher deines Programms vollkommen virtualisiert ist. Es gibt aber Betriebssystem-Funktionen, die dir mit Einschränkungen gestatten, bestimmte Speicherbereiche in deinen eigenen virtuellen Speicherbereich einzublenden.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten