arbeitsspeicher auslesen
-
hallo.
ich hab heute versucht meinen arbeitsspeicher auszulesen.
dazu hab ich versucht die in einem zeiger gespeicherte adresse auf 0 zu setzen und dann mit hilfe einer schleife um jeweils 1 erhöhen und ausgeben.
das ich die adresse verändere klapt ausgezeichnet nur leider kann ich nicht auf die werte, die an dieser stelle gespeichert sind, zu greifen und auslesen.kann mir mal einer ne kleine funktion oder nen denkanstoß geben wie ich meinen gesamten arbeitsspeicher auslese? danke.
-
Wenn du unter Windows arbeitest, wird das wohl ein Ding der Unmöglichkeit, da hier die jede Anwendung ihren eigenen Speicherbereich zugewiesen bekommt, der gegen äussere Zugriffe geschützt ist! Du kannst es aber trotzdem versuchen und dein Prozessor in den Flat Modus schalten:
jmp flat ;Global Descriptor Table GDT dw $ffff ; Segmentlänge Lowword dw $0000 db $00 ; physikalische Adresse 24Bit (segement beginnt bei 0) db $92 ; Zugriffsrechte (Alle Zugriffsrechte) dw $ffcf ; Segmentlänge HiWord flat: mov GDT[0], 16 ; GDT anpassen und laden mov eax, cs shl eax, 4 mov bx, offset GDT movzx ebx, bx add eax,ebx mov dword ptr GDT[2], eax lgdt pword ptr GDT ; GDT laden mov bx, 8 ; bx zeigt auf ersten Eintrag der GDT push ds ; DS auf Stack cli ; Interrupts aus mov eax, cr0 ; Control Register 0 nach eax or eax, 1 ; Protected Mode Bit setzen mov cr0, eax ; und zurückschreiben jmp pm ; Execution Pipe des Prozessors mit einem Jump leeren pm: ; Jetzt sind wir im Protected Mode mov gs, bx ; Segmentregister auf 4GB anpassen mov fs, bx mov es, bx mov ds, bx and al, $fe ; Protected Mode Bit löschen mov cr0, eax ; nach Control Register jmp rm ; wieder Execution Pipe löschen rm: ; zurück im Real-Mode sti ; Interupts wieder zulassen pop ds ; DS vom Stack holen ret ; fertig !
Jetzt kannst du (theoretisch) deinen Speicher linear auslesen, indem du in ebx die Adresse (absolute) schreibst und mit
mov al, gs:[ebx]
ausliest. Viel Erfolg!!
[ Dieser Beitrag wurde am 16.11.2002 um 21:24 Uhr von ºgrimmsenº editiert. ]
-
Kannst diesen Quellen code mit kommentaren ausrüsten , oder ist es schwer zu beschreiben ?
cu..
-
Gut so?
-
ja ich arbeite unter win 98.
aber bitte verate mir mal was du da geschrieben hast und welche header ich dazu einbinden muss.
das ganze sieht doch etwas sehr merkwürdig aus.
-
Das ist Assembler. Kannst du unter C auch benutzen:
asm { ..Assembleranweisungen.. }
statt den Dollarzeichen vor den Hexzahlen musst du 0x0.... schreiben.
-
ja das hab ich mir schon fast gedacht.
ich suche aber ne richtige c++ lösung. *g*
aber danke erstmal ich werds mal ausprobieren.
-
In reinem C++ wirst du da aber leider hübsch wenig finden...
MfG SideWinder