FAT1地址字節的開始=4364*512=2234368(記好了)
第四:16地址字節代表FAT表的個數(上表位02)表示有2個FAT表
第五:36——37地址字節代表FAT表占的扇區數(上表為7A07轉換0X077A轉換成十進制1914扇區)為了方便起見我們把它轉換成字節形式:1914*512=979968,與其說FAT表占了1914個扇區不如說FAT表占了979968個字節
第六:有了FAT1的初始字節,FAT表的長度,那么根據FAT32文件系統的結構可知,FAT1表下面是FAT2表
FAT2地址字節=FAT1地址字節+FAT長度=2234368+979968=3214336地址字節
同理FAT2表下面是根目錄則:
根目錄地址字節= FAT2地址字節+ FAT長度=(3214336+979968)=4194304地址字節
至此BPB的有效數據已經讀完了總結如下:
通過上面的對BPB的分析我們知道了原來一個扇區有512個字節,一個簇有4KB(8個扇區),
關鍵是我們知道了FAT表和根目錄的位置如下:
FAT1開始地址字節:2234368
FAT2開始地址字節:3214336
根目錄開始地址字節:4194304
下面看看我們找的對不對?
FAT1:
FAT2:
根目錄:
這樣我們找到了根目錄,FAT表后有什么用那?還是沒找到文件存哪里啊?接下來該是找得到文件的存儲位置的時候了:
第一:我們現在根目錄里找到EEE.TXT如圖:
這就是了:在對根目錄進行解釋
第一行45 45 45 20 20 20 20 20:表示EEE(E的ASCII碼是45)20表示空格,即不滿八位空格補,54 58 54表示TXT即文件類型,
第二行5-6個字符01 00表示此文件開始簇的高位地址
第二行10-11個字符BC 2F表示此文件開始簇低位地址
把這兩個字節結合為一個四位:0x00012FBC這就是此文件的開始簇,轉換成十進制為77756簇
然后你知道了開始簇你還要到FAT表里找到他,看看他占了幾簇!怎么在FAT表里找到他呢?
FAT表里一簇用4個字節表示,數據是從FAT表中第二個簇開始的(也就是第9個字節向后,前8個字節為FAT標志)
所以前兩個簇是無用的,要用(77756—2)=77754簇,前面說了一個簇用4字節表示那么我們要找到77754簇的字節地址就要把它分解成字節所以有77754*4字節=311014字節(也就是在FAT表中第311014字節是此文件的FAT對應簇),好了這就找到了?沒有還差一步
你要知道FAT1的首地址,好了我知道然后加上311014才是;
所以=FAT1首地址字節+此文件在FAT表中占得字節數=2234368+311014=2545392(此文件的FAT表中的簇)如果這個文件大于一簇那么必定會有下一簇,如果這個文件不到一簇那么這個我們找到的FAT表中應為FF FF FF 0F(結束標志)好了前面我們寫入的是ABCDE怎么會大于4KB那?顯然我們找到的這個簇一定是FF FF FF 0F
看看是不是:
果然是FF FF FF 0F;
這其實是為超過一簇的文件制作的鏈表,這個不滿一簇所以就結束了,如果滿一簇則會在下一個FAT表中給出超出一簇的存處地址,一次類推,這也是FAT表的關鍵用途;
我們這個繼續,既然FAT表中顯示我們存儲的數據不滿一簇我們直接找就行了,根據FAT32結構,可知根目錄下是數據區,所以要這樣計算存數扇區的首地址字節=根目錄+(此文件的簇大小—2【FAT表中的前兩個簇是FAT標志,真正的數據從第二簇開始所以要減去】)*一簇的字節數=4194304+(77756-2)*4096=322674688
看看我們寫的ABCDE是不是存在這個地址字節下了?
看看吧第一行:41 41 43 44 45 正好是ABCDE的ASCII碼
現在我敢說:我在可移動磁盤(H)盤下建立的EEE.TXT文件中的ABCDE被保存在H盤的第322674688/512=630224扇區看看圖:
第二行邏輯扇區數:630224
至此找到了,真他媽的麻煩啊