Den Speicher auslesen
-
Ich wollte mir mal aus purer Langweile den Speicher (RAM) meines PCs ansehen und habe folgendes Programm geschrieben:
#include <iostream> using namespace std; int main() { unsigned long *pdwMemory; for(unsigned long dwCounter=0;dwCounter!=10;dwCounter++) { pdwMemory=dwCounter; //Weisst den Wert von Counter als Adresse an pdwMemory zu. cout<<"0x0000000" //Vorzahl, wird noch verfeinert. <<pdwMemory //Zeigt die Adresse, auf die pdwMemory zeigt. <<" : " <<"0x0000000" //Vorzahl, wird noch verfeinert. <<*pdwMemory //Hier ist der Fehler. Diese Zeile soll den Wert, der in der Adresse geschrieben steht, anzeigen. <<endl; } cin.get() }
Dieses Programm soll den Speicherinhalt auf den Bildschirm bringen, allerdings hat das Programm noch ein paar kleine Fehler. Wenn der PC allerdings auf diese Zeile geht < <<*pdwMemory >, erscheint eine Fehlermeldung über eine ungültige Referenz. Warum kann mein Programm die ersten 10 Speicherstellen nicht lesen, sondern bricht nach einem Versuch ab? Kann es sein, dass mein Programm nicht auf Speicher ausserhalb des eigenen virtuellen Adressraum zugreifen kann?
-
.......... schrieb:
Kann es sein, dass mein Programm nicht auf Speicher ausserhalb des eigenen virtuellen Adressraum zugreifen kann?
Richtig. Wäre ja auch schlimm wenn jeder Hansel überall im Speicher rumschreiben und-lesen könnte oder?
-
Schreiben nicht, aber zumindest lesen. Das ist doch nicht zu viel verlangt, oder? Schliesslich habe ich nicht vor, Windows zu crashen, ich will nur wissen, was so im Bootsektor steht...
-
Geht so aber nicht :p Übrigens bilden sich die Adressen so auch nicht direkt auf den Arbeitsspeicher ab, siehe auch "Virtuelle Speicherverwaltung". Immerhin kann man unter Windows aber von fremden Prozessen den Speicher auslesen, mit der WinAPI-Funktion ReadProcessMemory.
-
.......... schrieb:
Schreiben nicht, aber zumindest lesen. Das ist doch nicht zu viel verlangt, oder? Schliesslich habe ich nicht vor, Windows zu crashen, ich will nur wissen, was so im Bootsektor steht...
http://de.wikipedia.org/wiki/Master_Boot_Record
das ist der bootsektor, wo du ausließt ist der virtuelle speicher deiner applikation also nen bereich der seperat von anderem ist und deiner App. zugewiesen wurde, alles was du da lesen kannst ist das was vorher drinnstand ( wenn es windows nicht überschreibt, das weiß ich nicht ), oder eben du reingeschrieben hast.