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