右圖是我的電腦裡硬碟的MBR,從最後反白的那
03 C0 2E CE代表的是第一個partition的大小。可以算得他的大小為0x03C02ECE * 0x200 = 0x7805D9C00 = 32,218,389,504 bytes差不多是30G。下一個partition entry就依此類推。這個是在我電腦上的硬碟,因為是NTFS的緣故,所以只用來解釋partition table的觀念,接下來看我的隨身碟,是由FAT32所format而成的。
如右圖所示,首先先把隨身碟Format成FAT的格式,也就是FAT16。
接著,用winhex開啟我們的磁碟,並且選取Partition 1
,和上面同樣的,Part
再來看到Boot Sector這裡面就有詳細的說明。按照Reserved sectors =4,所以從0x7E00開始,有四個sectors是保留的磁區,第五個Sector就是第一個FAT table。0x7E00 + 0x200 * 0x4 = 0x8600。Boot Sector裡頭有BPM這是FAT定義的partition基本資料。
如果你去看0x8600的位置,可以看到只有四個bytes的值。
前兩個bytes是F8 FF,所以代表是一顆硬碟。後兩個通常是FF FF沒有意義。因為我們還沒有置放檔案在這顆硬 碟,所以之後的欄位皆為零。
接著我們可以算得Root directory =( Reserved sectors + number of FATs * sectors per FAT ) x 512 + Base address
= ( 4 + 2 x 246 ) x 512 + 0x7E00 = 0x45E00
參考右邊這個圖,這就是整個MBR與file system的關係。右下角是一個partition。是代表第一個
partition entry的partition。
接下來我們新增一個文字檔,之後再觀察FAT和Root directory以
及data area的變化。
從root directory的位置,0x45E00可以
看到首先第一個32 bytes是儲存隨身碟
的名稱KINGSTON。不滿的以20填滿。在20之后有一個08,代表的是這個ENTRY儲存隨身碟的名稱。再來到下一個32 bytes的起始位置,0x45E20,可以看到接下來幾個32 bytes的FDB(file descriptor block)都是以E5為開頭,這代表的是已經被刪除的檔案。在這裡發現,我之前只是把檔名作更改而已,但是事實上,os的作法會新增一個新的FDB,並不會更改原本的FDB。我們看到最後一個FDB也就是0x45EC0,可以看到一開始的11 bytes就是檔名。然後在0x45EDA開始的兩個bytes 0002就是起始的cluster。接下來的四個bytes 00 00 00 0C代表的是檔案的大小,是以bytes為單位。所以我們的1234567.txt為12 bytes。因為裡頭有12個3。
在Data area的開始處,也就是文字檔開始的地方可以看到12個3。
No comments:
Post a Comment