![]() |
hauptspeicher ab offset 0 auslesen?
hallo ich bins, wieder mal
ich moechte unter windowsxp den inhalt des hauptspeichers ab offset $0 bis zum ende des erweiterungsspeichers lesen um es in einen sringgrid darzustellen, unter dos mit Turbo pascal hab ich das schon mal gemacht, aber wie geht das unter windows ??? ich hab mal gehoert,das windows den direkten zugriff auf den haupspeicher nicht zulaesst. waere dankbar für irgendwelche Vorschlaege, Ansatze und Ueberlegungen bitte keine kompletten Loesungen, moechte das selbst machen und was lernen :) |
Re: hauptspeicher ab offset 0 auslesen?
Such mal nach
\Device\PhysicalMemory und CreateFile! EDIT: ![]() |
Re: hauptspeicher ab offset 0 auslesen?
hallo neolithos,
danke erstmal für deine antwort. "device\physical_memory\" ist das eine api funktion, hab nichts gefunden in der dephi sdk help ??? |
Re: hauptspeicher ab offset 0 auslesen?
Moin!
Das ist keien WinAPI Funktion sondern ein Dateiname den du CreateFile (in ein wenig abgewandelter Funktion) übergeben musst umd damit dann darauf zu zu greifen. Als Ansatz kannst du dir mal ![]() MfG Muetze1 |
Re: hauptspeicher ab offset 0 auslesen?
morgen leute
na schoen , jetz hab ich ein Handle :
Code:
aber wie lese ich daraus 1 oder mehrere bytes? es wird in der funktion doch nirgendwo eine indexposition uebergeben bzw. abgefragt ? die funktion muss ich doch bestimmt wie eine API Konvertieren(headerkonvertierung) oder ?#include <windows.h> #include <stdio.h> HANDLE hFile; hFile = CreateFile(TEXT("myfile.txt"), // file to create GENERIC_WRITE, // open for writing 0, // do not share NULL, // default security CREATE_ALWAYS, // overwrite existing FILE_ATTRIBUTE_NORMAL | // normal file FILE_FLAG_OVERLAPPED, // asynchronous I/O NULL); // no attr. template if (hFile == INVALID_HANDLE_VALUE) { printf("Could not open file (error %d)\n", GetLastError()); return 0; } |
Re: hauptspeicher ab offset 0 auslesen?
Moin!
Ich denk du willst den Hauptspeicher auslesen, aber warum gibst du dann myfile.txt an? Lies dir die MSDN Seite mal genauer durch, es gibt spezielle "Dateinamen" die du angeben kannst (z.B. \\.\PhyscialDrive0) um spezielle logische Geräte zu öffnen. Und nach dem Prinzip musst du es mit dem Hauptspeicher auch machen. MfG Muetze1 |
Re: hauptspeicher ab offset 0 auslesen?
![]() ![]() Nur als Hinweis, unter Windows XP x64 (Windows XP 64-Bit for 64-Bit Extended Systems (AMD64)) funktioniert die 16-Bit-Veriante nicht mehr. Und zudem ist offensichtlich nicht mehr der ganze Bereich ($00000000-$000FFFFF) über das 'Physical Memory'-Objekt erreichbar, sondern nur noch der obere Bereich (bei meinem System $00023000-$000FFFFF). ps: habe gerade gelesen, dass Du keine komplette Lösung haben willst... nunja, die Lösung kannst Du im Quelltext nachlesen und versuchen es zu verstehen (ich glaube nicht, dass es 'hilfreich' ist sowas alleine herauszufinden zu müssen...) |
Re: hauptspeicher ab offset 0 auslesen?
hallo
Code:
matze schrieb: schau dir die MSDN an
@matze. da steht deshalb myfile.txt drin, weil das genau das beispiel aus der MSDN ist @NicoDE gut dann hab ich ein handle auf dem speicherbereich, aber wie gehe ich an eine bestimmte stelle im speicher und lese die aus?? ich hatte unter dos mit Turbo Pascal schon mal so ein programm geschrieben, das direkt in den grafikspeicher schreibt. somit war es moeglich z. b . die sekunden der pc uhr als sich aendernde hexwerte zu verfolgen. wenn de willst, kann ich dir auch ma das prog schicken dann weiste was ungefaehr ich machen will. ist aber nur eine fruehe version ohne menu, nur mit tastatur shortcuts, da ich mal nen datenverlust hatte(nicht durch das programm,sondern durch meine hdd) |
Re: hauptspeicher ab offset 0 auslesen?
Das geht, wie bei normalen Dateien mit SetFilePointer, ReadFile und WriteFile.
|
Re: hauptspeicher ab offset 0 auslesen?
Zitat:
Unter WindowsNT: - wird der für Dich interessante Speicherbereich nicht in den Adressraum von Prozessen gemappt - dass heißt, dass kein Prozeß auf den Speicherbereich direkt zugreifen kann - weiterhin gibt es keine Win32 API-Funktion um an den betreffenden Bereich zu kommen (es können mit der Win32 API keine benannten Objekte mit '\' im Namen geöffnet werden...) Was möglich ist: - das benannte Kernel-Objekt '\Device\PhysicalMemory' mit Hilfe einer NT-internen Funktion zu öffnen (das Objekt repräsentiert den physikalischen Speicher, geht nur als lokaler Admin) - mit dem Handle kann nun ein Bereich aus dem 'physikalischen Speicher' in den Adreßraum Deines Prozesses gemappt werden (diesen Bereich kannst Du nun lesen...) NTVDM: - der Speicherbereich wird vom '16-Bit Emulator' bereitgestellt Win9x: - der entspechende Speicherbereich wird in jedem Adressraum gemappt (direkter Zugriff möglich) Gruss Nico edit: wenn Du versuchen willst unter WinNT direkt in den Bildschirmspeicher zu schreiben: such Dir eine andere Herausforderung :D |
Re: hauptspeicher ab offset 0 auslesen?
hallo leute,
erstmal dank fuer eure antworten. ich hoffe das hilft mir. @nico : ich will das unter Winxp,2000 machen, die ntvdm muss ich aber nicht noch etra ansprechen oder ? |
Re: hauptspeicher ab offset 0 auslesen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz