Autor Thema: Ermittlung des Roots bei Festplatten  (Gelesen 4814 mal)

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« am: 01. December 2005, 16:53 »
Hallo,

ich schreibe grad einen Bootsektorprogramm für eine FAT16 Partition und bin grad am Grübeln wie ich die Blocknummer rausbekomme an der 1. meine Partition beginnt und 2. mein Root (eher zweitrangig, da man es bei FAT32 ja mit im Bootsektor steht und ich es mir bei FAT16 zur Not ja auch ausrechnen kann). Ich lese von der Festplatte mittels LBA um die Umrechnung per CHS zu umgehen und nun ist mein Problem, dass ja zB meine erste Partition mit dem Block 63 beginnt, und die Zweite zB mit 65376. Gibt es noch eine andere Möglichkeit herauszufinden, wo sich der geladene Bootsektor auf der Platte befindet, außer im MBR nachzusehen?
Weil wenn ich erst im MBR nachsehen muss glaub ich nicht, dass ich das alles in einen Sektor quetschen kann...

MM

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #1 am: 01. December 2005, 17:20 »
sollte net so schwirig sein... bin auch gerade an einem fat16 loader... :
;If we aren't booting from a floppy the the mbr-code
;save the mbr-entry to si (pointer) -> starting sector si + 8
.CalculateOffset:
cmp dl, 0x80
jb .GetDiskParams
mov eax, DWORD [si + 8]
mov [PartitionStart], DWORD eax

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« Antwort #2 am: 01. December 2005, 18:08 »
Was soll denn dieser Codeabschnitt genau machen, bzw unter welchen Umständen soll er funktionieren?
Bis zum Auslesen der Laufwerksnummer aus dl gehe ich mit, aber was passiert danach? Gehst du davon aus, dass ds:si auf den Partitionseintrag in dem MBR zeigt?
Wobei ich dann nicht verstehe, wo dann die Variable PartitionStart liegen soll.
Kann es sein, dass dies nur funktioniert, wenn man einen bestimmten Bootmanager verwendet oder so? Weil bei mir zeigt ds:si beim Start zB auf 6000:0A00, wo eindeutig nichts zu holen ist.
Könntest du das nochmal etwas genauer erklären?

MM

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #3 am: 01. December 2005, 19:43 »
ich habe auf jedenfall irgendwo gelesen dass der mbr code nach dem booten einer partition ds:si auf den Partition Eintrag zeigt. sofern natürlich nicht von der diskette oder von der cd (auf der cd ist eh kein fat, cdfs -> iso96blabla) gebootet wird. PartitionStart ist natürlich eine lokale variable. mit dem cmp befehl teste ich ob es keine floppy war... villeicht habe ich mich aber auch geirrt und das beschriebene funktioniert nur bei einem bestimmten mbr code. habe erst heute damit angefangen.
falls es gar nicht geht kannste ja immer noch einen eigenen mbr schreiben. sollte auch net so schwer sein..

gruss

ps: wie weit bist du schon mit deinem loader?

links:
http://home.teleport.com/~brainy/fat16.htm
http://home.teleport.com/~brainy/lfn.htm
http://www.nondot.org/sabre/os/files/FileSystems/FatFormat.pdf

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« Antwort #4 am: 01. December 2005, 20:36 »
Einen eigenen MBR wollte ich mir nicht machen, denn der Nutzer sollte schon in der Lage sein sich einen Bootmanager seiner Wahl zu installieren.
Ich denke das einfachste wird sein, einfach wirklich nochmal den MBR auszulesen.

Und wenn du sagst, dass "ds:si" auf den Partitionseintrag zeigt, dann kannst du nicht einfach der Variable PartitionStart den Wert zuweisen, ohne vorher das ds neu zu laden. Und wie gesagt, bei mir zeigt es NICHT auf den Eintrag, sondern irgendwo anders hin.

>>wie weit bist du schon mit deinem loader?
Also mit dem für Festplatten noch nicht sehr weit, da ich grad an diesem Problem hänge, aber der für Disketten ist schon seit längerem zuverlässig in Benutzung.
Ich hab mir aber vorher auch erstmal ein kleines Programm geschrieben, um den Bootsektor recht komfortabel auf Festplatten installieren zu können...

Aber zurück zum Problem: Wenn ich gezwungen wäre den MBR auszulesen um herauszufinden, wo meine Partition sich befindet, woher weiß ich dann eigentlich, welche dieser Partitionen es ist? In dl steht ja nur die Drive-Nummer.

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #5 am: 01. December 2005, 20:50 »
Zitat
Aber zurück zum Problem: Wenn ich gezwungen wäre den MBR auszulesen um herauszufinden, wo meine Partition sich befindet, woher weiß ich dann eigentlich, welche dieser Partitionen es ist? In dl steht ja nur die Drive-Nummer.

genau das ist das problem.
deshalb muss der mbr einen hinweis hinterlassen. gib doch mal den wert der in ds:si+8 (dword) steht aus und teste ob es übereinstimmt.

Zitat
Und wenn du sagst, dass "ds:si" auf den Partitionseintrag zeigt, dann kannst du nicht einfach der Variable PartitionStart den Wert zuweisen, ohne vorher das ds neu zu laden. Und wie gesagt, bei mir zeigt es NICHT auf den Eintrag, sondern irgendwo anders hin.


keine angst ds habe ich schon auf null gesetzt. sprich der eintrag ist an der 0x0000:si stelle....
floppy fat12 loader habe ich auch scho lange... nun möchte ich mein os ab usb stick laden. deshalb brauche ich einen fat16 treiber ^^

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 01. December 2005, 21:45 »
hi,
bei den FAT Dateisystemen gibt es doch im ersten Sektor immer einen Wert namens "HiddenSector", der angibt, wieviele Sektoren auf der Festplatte noch vor der eigentlichen Partition liegen !

mfg,
stefan

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« Antwort #7 am: 01. December 2005, 21:55 »
Das ist so nicht ganz richtig, Hidden Sectors sind die Sektoren die vor den beiden FATs kommen (also nach dem Bootsektor (wobei er auch als Hidden Sector gezählt wird (soweit ich mich erinnere))). Wenn man also weiß wo der Bootsektor liegt (bei Disketten sehr einfach, da bei 0), dann kann man so die Position der FATs und des Roots errechnen, wenn man aber die Position des Bootsektors nicht kennt hilft das nicht weiter.

MM

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 02. December 2005, 20:15 »
hi,
nein, Hidden Sectors sind die Anzahl der Sektoren, die vor der FAT Partition kommen. Ich glaube du hast da was mit ReservedSectors verwechselt  :D

Aus so einem FAT Whitepaper von Microsoft zu HiddenSectors:
"Count of hidden sectors precending the partition that contains this FAT volume [...] Should be zero on media that are not partitioned."

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« Antwort #9 am: 02. December 2005, 22:06 »
Hmmmmm, ich glaub damit ist das Problem gelöst, ich lese hier grad in meiner Doku:

"0x20 4 versteckte Sektoren (entspricht den Bytes 8-11 in dem zugehörigen Partitionstabelleneintrag)"

cool, dann hat sich das Problem damit erledigt.

MM

 

Einloggen