fat16 檔案系統的結構

2021-07-28 14:24:28 字數 2432 閱讀 3626

fat檔案系統在windows比較常見,相對於ext系統而言,也比較簡單。是學習檔案系統的切入點。

首先先了解下fat16檔案系統的基本結構依次為:

dbr扇區、fat表1、fat表2、根目錄和資料區。

dbr扇區:dbr

是作業系統可以直接訪問的第乙個扇區,

包括乙個引導程式和乙個稱為

bpb的本分割槽引數記錄表。引導程式的主要任務是當

mbr將系統控制權交給它時,

判斷本分割槽跟目錄前兩個檔案是不是作業系統的引導檔案。如果確定是,就將其讀入記憶體,並把控制權交給該檔案。

bpb引數塊記錄著本分割槽的啟始扇區、結束扇區、檔案儲存格式、硬碟介質描述符、根目錄大小、

fat個數、分配單元的大小等重要引數。

fat1,fat2:是簇的鍊錶。在根據目錄項獲取檔案的首簇號後,在fat 找到對應的簇,可以找到下乙個簇,一直到檔案結束。對於fat16,每個簇用16bit來表示,而對於fat32,使用32bit來表示。這應該是兩者之間的重要區別。

根目錄:根目錄的作用就是有檔案或者目錄的首簇號,以及檔案的長度(目錄的長度是0)。fat16中,根目錄的所佔空間可以根據bpb中的引數——maximum root directory entries(0x11,2bytes)。

資料區:檔案等資料待的地方。緊跟著根目錄。從2號簇開始。

根據dbr中的一些引數得到fat和根目錄的位置。根據根目錄得到次級目錄的簇號(對於更多級的目錄依此類推),來到該簇後,再根據檔名得到查到對應的檔案的首簇和檔案長度。根據檔案長度得到檔案所佔的簇的數量。由首簇號到fat檢視檔案的簇鍊錶,依次得到檔案的各個簇,從而也就得到了檔案的全部內容。

選取安卓手機中modem 分割槽作為物件。modem 在機台裡的掛載點是firmware,可以adb  shell 進去系統之後,cd firmware看看裡面的內容。裡面有兩個資料夾:image和verinfo。而我的目的就是要讀到verinfo資料夾裡面的檔案ver_info.txt。將modem dd出來,然後使用winhex檢視二進位制檔案。

先看通過winhex檢視的結果。這個扇區裡面基本上能得到大部分的檔案系統的引數。(特別注意,儲存是按照小端模式)

下面的表,解釋了一些主要引數的意義。

根據上面的引數,我們可以算出fat1的偏移位址以及根目錄的偏移值。

2位元組表示乙個簇的狀態。具體意義如下表所示:

每個簇對應的0x0002-0xffef之間的值,表示要讀取檔案那麼下乙個簇的簇號。

下面看一下根目錄的前面部分:

看到這裡,就可以看到前面提到的兩個資料夾了。在根目錄中,乙個檔案或者乙個目錄用32位元組來表示。

因此,可以得到,verinfo目錄的首簇號是 9f 12 也就是 0x129f = 4767號簇。

根目錄的偏移位址是22016,根目錄佔32個扇區,所以,2號簇的位置是:22016+32*512=38400 。可以得到verinfo的偏移位址是38400 +(4767-2)*512*32 = 78108160

看看這個位置的二進位制:

顯然,接下來可以看到這個目錄下面,會有ver_info.txt的檔案的首簇號和檔案的長度。首簇號是 a0 12 也就是0x12a0=4768。

檔案長度是1f 也就是31<<512*32,因此只佔乙個簇,不需要回去檢視fat來找到剩下的簇。

根據簇號,又可以得到這個檔案所在位置:(4768-2)*512*32+38400 = 78124544

看看這個位置的二進位制:

到這裡,也就看到了我們要檢視的檔案的內容。事實上,這和用mount掛載出來看到的結果是一樣的,撒花~~

看這個還是花了很多時間的。fat16和fat32也有所區別,但是實際上大同小異。下篇寫ext2檔案系統的結構。

參考文章:

非常感謝!

FAT16檔案系統

fat16檔案系統 yoyoone 1.基本知識 扇區 每個磁軌被分為若干個弧段,這些弧段就是扇區。通常情況下,每個扇區512個位元組。簇 fat將磁碟空間按一定數目的扇區為單位進行劃分,這樣的單位稱為簇。簇的大小一般為2的n次方。2.fat16表的組織形式 使用fat檔案系統必須具有幾個部分 保留...

FAT16檔案系統簡介 一

我們在前面已經完成了主引導扇區程式的編寫。通過主引導記錄,我們已經實現了裝入分割槽引導扇區執行的操作。和主引導扇區一樣,分割槽引導扇區也只有區區 512 個位元組,根本不可能放得下所有的 來將以作業系統核心裝入記憶體,完成重定位工作並設定核心的執行環境。應次,分割槽引導扇區也只能做一件事,那就是把真...

FAT16檔案系統解析(C 版本)

今天fat檔案系統總算告乙個段落了,已經可以非常完美的讀取包含fat16檔案系統的磁碟了。由於是採用c 編寫,直接借鑑的 很少,並且考慮到mf不支援二進位制序列化,所以對資料結構的解析,是乙個乙個位元組進行的,所以很耗費時間。下面就是程式執行後的結果 可以識別物理磁碟及物理磁碟的分割槽 下圖是用檔案...