Entwickler-Ecke
Sonstiges (Delphi) - Daten direkt aus RAM lesen.
tmtmtm - Mi 03.07.02 15:56
Titel: Daten direkt aus RAM lesen.
Hallo Leudez!
Wollte mal fragen, wie man am besten direkt Daten aus dem Arbeitsspeicher lesen kann.
Ich versuche es derzeit mit folgender Methode:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Const MaxWord=65536; Buffer=512;
Type TBytes=Array[0..Buffer] of Byte; PBytes=^TBytes; end;
Var B:Byte;
Procedure SetPBytes(Var P:PBytes;Seg,Offs:Word); Begin IF Offs>(MaxWord Div Buffer)-1 Then Offs:=(MaxWord Div Buffer)-1; P:=Ptr(Seg*MaxWord+Offs*Buffer); // Setzt Anfangs-Adresse des //Arrays auf den gewünschten Ort //im RAM End; |
Die Adressierung im RAM über die Prozedur SetPBytes funktioniert schon ordentlich. Nur wenn ich jedoch auf das gesetzte Array zugreifen (lesen, z.B. B:=P[2]) möchte, erhalte ich für viele Speicherbereiche eine EAccessViolation-Exception und bekomme keine Daten von der Stelle. :? Wie kann ich diese Bereiche trotzdem relativ schnell auslesen? (Wie ich die Exception abfange weiß ich.)
MfG Thomas
Code-Tag hinzugefügt. Marc
Pit - Mi 03.07.02 18:36
Titel: Re: Daten direkt aus RAM lesen.
tmtmtm hat folgendes geschrieben: |
Wollte mal fragen, wie man am besten direkt Daten aus dem Arbeitsspeicher lesen kann. |
Erzähle mal genau, was du machen möchtest.
Zitat: |
Ich versuche es derzeit mit folgender Methode: |
Das was du dort geschrieben hast, taugt ausschließlich um aufzuzeigen, daß du nicht weißt, was du machst. Du würfelst da irgendwelche Dinge zusammen, so gibt es z.B. bei 32 Bit gar keine Segmente mehr. Und so, wie du es da versuchst, haben Segmente noch nie funktioniert, jedenfalls bei keinem mir bekannten Prozessor.
Hinzu kommt, daß in einem Multitasking-Betriebssystem Anwendungen in unterschiedlichen Umgebungen laufen, das bedeutet, daß jede Anwendung seinen eigenen virtuellen Speicher hat.
MfG Pit.
tmtmtm - Mi 03.07.02 18:54
Titel: Re: Daten direkt aus RAM lesen.
Hallo Pit,
danke erst mal für deine Antwort.
Das war der Ansatz, den ich von meiner DOS-Programmierung her in Windows-Delphi 5 integrieren wollte.
Mir war klar, daß sich da ein kleiner Unterschied zwischen DOS- & Windows- Speicherverwaltung ergeben würde.
Also wie ist denn nun der Windows-Speicher aufgebaut?
Kann mann da wirklich nur 4 GB RAM adressieren???
Wie lese ich den gesamten Arbeitsspeicher aus??????
Wenn nicht, wie im DOS mit Zeigern? Wie dann???
Wenn du oder jemand anderes noch einen diesbezüglichen Tip für mich habt, dann her damit.
Im DOS klappt's nämlich schon. (Zumindest im Assembler.)
Jedoch habe ich vom Delphi-Windows-ASM NullKommaNull Ahnung.
Also auf bald,
Thomas :wink:
tmtmtm - Mi 03.07.02 18:57
Ach ja, ich möchte unbedingt den physischen Arbeitsspeicher ohne irgendwelche Hindernisse auf gesperrte oder anderweitig reservierte Bereiche auslesen. D.h. nicht nur zu irgendeinem bestimmten Programm.
Aber zur Zeit weiß ich nicht mal direkt, wie der Speicher unter Windows organisiert ist. Wäre toll, wenn da jemand was wüßte.
Gruß T.M.
Pit - Do 04.07.02 14:06
tmtmtm hat folgendes geschrieben: |
Mir war klar, daß sich da ein kleiner Unterschied zwischen DOS- & Windows- Speicherverwaltung ergeben würde. |
Das hat nichts mit DOS / Windows zu tun, sondern mit 16 / 32 Bit und mit RealMode / Protected Mode.
Zitat: |
Also wie ist denn nun der Windows-Speicher aufgebaut? |
Bei 32 Bit ist die virtuelle Adressierung linear. Die Adressbreite ist 32 Bit.
Zitat: |
Kann mann da wirklich nur 4 GB RAM adressieren??? |
Was heißt hier nur?
Zitat: |
Wie lese ich den gesamten Arbeitsspeicher aus?????? |
Gar nicht, der Speicher ist virtuell. Wenn du Speicher benötigst, dann sagst du der Speicherverwaltung, wieviel du gerne hättest und sofern vorhanden bekommst du dann einen bestimmten Bereich zugewiesen. Wo der physisch liegt, ist dabei völlig egal, wenn er gerade nicht gebraucht wird, liegt er bei Überbedarf an Speicher auch gerne mal auf der Festplatte rum.
Zitat: |
Wenn nicht, wie im DOS mit Zeigern? Wie dann??? |
Die Zeiger arbeiten nicht mehr mit Segment und Offset, sondern linear. Allerdings nur virtuell, physisch gibt es dann wieder eine Unterteilung in Seiten.
tmtmtm hat folgendes geschrieben: |
Ach ja, ich möchte unbedingt den physischen Arbeitsspeicher ohne irgendwelche Hindernisse auf gesperrte oder anderweitig reservierte Bereiche auslesen. |
Kurz und schmerzlos: Vergiß es. Um das hinzubekommen, mußt du dich nicht nur mit dem Betriebssystem anlegen, sondern auch noch mit der CPU.
Die Frage ist, wozu du das überhaupt willst. Mit den Inhalten kannst du ohnehin nichts anfangen und nutzen kannst du auch nichts ohne dabei kleineren oder sogar gewaltigen Schaden anzurichten. Letzteres geht bis hin zum kompletten Verlust sämtlicher Daten auf dem Rechner.
MfG Pit.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!