Speicher direkt lesen



  • Hallo, brauche ein kleines Programm das mir aus Speicher an bestimmter stelle mehrere Zeichen ausliest. Es handelt sich um BIOS-Version, hab mit debug.exe schon die Adresse gefunden. Das Programm wird ausschließlich nur unter DOS laufen daher keine sorge um Speicherverwaltung, also direkt.
    Das hab ich bis jetzt probiert, jedoch ohne erfolg:

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {

    int *pInt = 0xf000e0c2;
    int myInt = *pInt;
    printf( "%i\n", myInt);
    return 0;
    }

    Ob jemand eine Idee hat wo ich falsch liege?
    Danke im Voraus.



  • Das Programm an sich ist korrekt, die Frage ist nur, ob dein Prozess auf die Adresse 0xf000e0c2 zugreifen darf. Wenn das OS das nicht zulässt, dann kannst du so nicht darauf zugreifen.



  • Wie macht es dann debug.exe? Denn da hab ich es ja gesehen?



  • <vermutung>debug.exe für DOS dürfte noch ein 16-Bit Programm sein, welches im Realmode läuft und mit Segment- und Offsetadresse arbeitet.</vermutung>

    Hast Du das Ding als Win32-Konsolenprogramm übersetzt?

    EDIT:
    Vermutung könnte Quatsch sein, da debug.exe scheinbar ja auch ans Highmemory kommt. Die Adresse sieht zudem nach irdendwas virtuellem aus, oder liegt der BIOS-Speicher am oberen Ende der Skala?



  • <vermutung>Windows hat vielleicht ein System Call dafür. Bin kein Windows Freak, nur eine Vermutung</vermutung>



  • supertux schrieb:

    <vermutung>Windows hat vielleicht ein System Call dafür. Bin kein Windows Freak, nur eine Vermutung</vermutung>

    windoofs-speicher oberhalb von 0x7fffffff (virtuelle adresse) ist kernel-land. die windoofs-eigene 'virtual dos machine', für alte dos-programme, kann aber sämtliche zugriffe auf irgendwelche adressen unlenken. das geht völlig transparent, auch werden direkte hardware-zugriffe an gerätetreiber weitergeleitet usw.
    🙂


Anmelden zum Antworten