Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi hauptspeicher ab offset 0 auslesen? (https://www.delphipraxis.net/25397-hauptspeicher-ab-offset-0-auslesen.html)

richard_boderich 5. Jul 2004 22:31


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 :)

neolithos 5. Jul 2004 22:38

Re: hauptspeicher ab offset 0 auslesen?
 
Such mal nach

\Device\PhysicalMemory und CreateFile!

EDIT: http://www.swissdelphicenter.ch/torr...ode.php?id=748

richard_boderich 5. Jul 2004 23:10

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 ???

Muetze1 5. Jul 2004 23:18

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 das hier anschauen.

MfG
Muetze1

richard_boderich 6. Jul 2004 06:45

Re: hauptspeicher ab offset 0 auslesen?
 
morgen leute


na schoen , jetz hab ich ein Handle :

Code:

#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;
}
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 ?

Muetze1 6. Jul 2004 09:56

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

NicoDE 6. Jul 2004 10:11

Re: hauptspeicher ab offset 0 auslesen?
 
http://www.bendlins.de/nico/delphi/BiosHelp.zip
http://www.bendlins.de/nico/delphi/BiosHelp.tar.bz2

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...)

richard_boderich 6. Jul 2004 17:46

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)

scp 6. Jul 2004 18:30

Re: hauptspeicher ab offset 0 auslesen?
 
Das geht, wie bei normalen Dateien mit SetFilePointer, ReadFile und WriteFile.

NicoDE 6. Jul 2004 18:56

Re: hauptspeicher ab offset 0 auslesen?
 
Zitat:

Zitat von richard_boderich
gut dann hab ich ein handle auf dem speicherbereich, aber wie gehe ich an eine bestimmte stelle im speicher und lese die aus?

Ich gehe mal davon aus, dass wir hier nur über die aufwendigere Methode unter Windows NT sprechen (MS-DOS und Win9x sind ja kein Problem)...

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz