Bootsektor auslesen
-
Hallo,
Ich habe mal, weiterführend zu dem Thread hier versucht das Programm zum schreiben des Bootsektors umzudrehen. Ich habe es noch nicht ausprobiert, da ich dafür erst Linux starten muss, aber hier ist trotzdem mal der Source:#include <sys/types.h> #include <unistd.h> #include <fcntl.h> int main() { char boot_buf[512]; int floppy_desc, file_desc; floppy_desc = open("/dev/fd0", O_RDONLY); lseek(floppy_desc, 0, SEEK_CUR); read(floppy_desc, boot_buf, 512); close(floppy_desc); file_desc = open("./boot", O_RDWR); write(file_desc, boot_buf, 512); close(file_desc); }
Glaubt ihr, das könnte funktionieren???
Ich werd's mal ausprobieren und dann posten, ob es funzt...
-
Es funktioniert!!!
Allerdings habe ich das Programm nochmal verändert, da im "Schreib"-Programm ja die letzten beiden Zeichen vom C-Programm gesetzt werden. Jetzt werden diese an der Standardausgabe ausgegeben anstatt mit in die Datei geschrieben zu werden.Hier jetzt der vollständige Code:
#include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> int main() { char boot_buf[512]; int floppy_desc, file_desc; floppy_desc = open("/dev/fd0", O_RDONLY); lseek(floppy_desc, 0, SEEK_CUR); read(floppy_desc, boot_buf, 512); close(floppy_desc); file_desc = open("./boot", O_RDWR); write(file_desc, boot_buf, 510); close(file_desc); printf("Zeichen 511 des Bootsektors: %x\n",boot_buf[510]); printf("Zeichen 512 des Bootsektors: %x\n",boot_buf[511]); }
Eines wundert mich jedoch:
Die Datei boot, die ich auf die Diskette schreibe hat ca. 16 Byte, die ausgelesene Datei jedoch 510 Byte (Ich habe ja auch 510 Byte ausgelesen). Wie kommt das??? Und wie kann man 510 Byte schreiben, wenn die Datei doch nur 16 Byte hat???
-
Original erstellt von nEo SkYwAlKeR:
Eines wundert mich jedoch:
Die Datei boot, die ich auf die Diskette schreibe hat ca. 16 Byte, die ausgelesene Datei jedoch 510 Byte (Ich habe ja auch 510 Byte ausgelesen). Wie kommt das??? Und wie kann man 510 Byte schreiben, wenn die Datei doch nur 16 Byte hat???Naja, die Diskette hat nunmal 1.44MB. Wieviele du davon beschrieben hast ist im Nachinein nicht erkennbar, da kein Dateisystem für die Rohstruktur einer Diskette existiert. Du kannst immer soviele Bytes auslesen wie die Diskette groß ist, weil sie ja schon immer da existiert haben.
-
Kann das jemand für MS Windows umschreiben?
-
Ich weiß nicht, ob man bei Windows überhaupt auf den Boot-Sektor eines Datenträgers zugreifen kann. Windows will doch selber zerstören...
[ Dieser Beitrag wurde am 17.05.2003 um 15:10 Uhr von nEo SkYwAlKeR editiert. ]
-
-
Original erstellt von nEo SkYwAlKeR:
**Ich weiß nicht, ob man bei Windows überhaupt auf den Boot-Sektor eines Datenträgers zugreifen kann. Windows will doch selber zerstören...
**Kann man. Ich benutze atm immer dd aus den Cygwin-GNU-Tools, also
dd if=balbla of=/dev/fd0 bs=512 count=1
z.B. Ebenso soltle obiges Programm vermutlich unter Cygwin kompilieren.
-
ein einfaches cat bootsector > /dev/fd0 geht auch