PDA

View Full Version : come funziona la fat


tudaz
23-06-2014, 01:06
Salve a tutti , sono nuovissimo e spero di non aver sbagliato sezione!
Premetto che ho letto molte volte questa guida : http://www.hwupgrade.it/forum/showthread.php?t=690119 ma ancora non sono riuscito a capire del tutto come funziona nei minimi dettagli .

Per cercare di capire ho iniziato creando un file immagine con winimage:ho cliccato su custom image e per iniziare ho impostato fat 12/16 , poi 4 settori per cluster e 16 settori totali . Quindi 16*512 (byte) avrò 8Kbyte ,cioè 8192 byte , cioè 65536 bit . Inizialmente lascio tutto vuoto senza alcun file.
Apro il file immagine con winhex e vedo un sacco di cose scritte nella prima parte poi tanti zeri e alla fine qualche altra riga scritta.

Il mio primo problema è il voler sapere da quale bit inizia la root directory (cioè se ho capito bene la parte in cui viene salvato il nome del file , la dimensione e l'indice del cluster ) , così come la fat o la data sector. Come si fanno a determinare al variare del numero di settori , numero di settori in un cluster e variando fat 12 o 16 o 32 ?

Poi correggetemi se sbaglio , ho capito che per leggere il contenuto del file si inizia andando al cluster del data sector indicato nell'indice dopo il nome del file , leggendo un numero di byte pari alla dimensione del cluster ; se il file è più lungo di un cluster allora letto il primo si va a leggere nella fat corrispondente sempre al numero dell'indice quale è il cluster di data sector successivo da leggere .
Ma facendo un esempio , se io ho l'indice pari a 3 , sapendo da che bit inizia il data sector e facendo 3 per dimensione del cluster so da quale bit iniziare a leggere e per quanto leggere . Poi però a cosa corrisponde 3 nella fat : cioè sapendo da dove inizia la fat quanti bit devo saltare dall'inizio per leggere il cluster data successivo ?

Spero di essere stato almeno chiaro nell'aver fatto capire quanti dubbi ho in testa ...

Spero che qualcuno con tanta pazienza possa illuminarmi!! Grazie mille

Daniels118
23-06-2014, 12:34
Mamma mia, perché vuoi fare questa cosa terribile?
Non mi ricordo più nulla nello specifico e non ho intenzione di rileggere manuali infiniti, ma se vuoi posso inviarti del codice assembly per processori x86 che serve per leggere una fat12. Il codice non è completo, abbandonai il progetto prima di portarlo a termine, ma i file della root dovrebbe riuscire a leggerli, fammi sapere se ti interessa così lo cerco.

tudaz
23-06-2014, 13:34
me ne sto rendendo conto che è una cosa terribile , ma per adesso voglio solo capire bene come funziona , quindi più che codice assembly mi faresti un gran favore indirizzandomi a qualche manuale (possibilmente in italiano anche se ci spero poco) che spieghi bene come funziona la fat . Lo so che esistono tante librerie che fanno già tutto ma per una volta vorrei capire il livello più basso possibile :)

Daniels118
23-06-2014, 13:57
Se non ricordo male le informazioni le presi su wikipedia, vedi se queste sono sufficienti http://it.wikipedia.org/wiki/File_Allocation_Table
altrimenti affidati alla versione in inglese http://en.wikipedia.org/wiki/Design_of_the_FAT_file_system
alla fine si tratta di comprendere gli offset dei vari campi e le relazioni tra le varie tabelle, è un lavoro un po' lungo ma niente di complesso (cosa c'è di più terribile di questo???).

tudaz
23-06-2014, 15:07
sisi avevo già visto su wiki e google in generale prima di scrivervi qui , e fino a ieri quello che mi aveva fatto capire qualcosa in più era la guida su questo forum , per quello ho deciso di chiedere qua . Invece continuando a cercare ho trovato questa guida http://www.tavi.co.uk/phobos/fat.html (purtroppo) in inglese che mi ha fatto capire quasi perfettamente tutto :winner: (la parte su come leggere la fat è più chiara sulla guida di questo forum) ... farò alcune prove su file veri e vedrò quello che realmente ho capito .

Chissà magari un giorno scriverò io una guida di come funziona :asd: :asd: :asd:

Forse a naso direi che più terribile di questo c'è l'ntfs :asd: :asd: :asd: