從最簡單的開始,如何在fat32格式的u盤裡找到乙個檔案?
如果有u盤,那麼可以拿實際的u盤做試驗,這裡可以使用乙個image檔案來做試驗,效果一樣。
在整個實驗過程當中,會不停的用到如下幾條命令:
mount test.img /mnt/
umount /mnt
hexdump -c -s ***x -n ***x test.img
具體含義請自行man。
1 首先,建立乙個fat32格式的image檔案。分作如下幾步:(環境為ubuntu 14.04)
a cd /tmp
b sudo dd if=/dev/zero of=test.img bs=512 count=80000
在這一步中,要保證最終的size(bs*count)達到一定數目,具體是多少,目前還沒研究,到後面細節的時候再來研究。
這個時候用hexdump來看,將會看到整個檔案裡全部是0.
c sudo mkfs.vfat -f 32 test.img
這裡就會在這個image檔案中安裝fat32的檔案系統,或者,把這個檔案用fat32的方式進行格式化。
注意,這裡可以用hexdump命令檢視一下目前這個檔案裡的內容,此時已經可以看到fat32的bpb,fsinfo,fat表。
2 把第一步中做好的image掛載起來。
sudo mount test.img /mnt
可以通過mount指令來檢視是否掛載成功,一般會是在最後一項顯示該掛載項。如果成功,則會找到「/tmp/test.img on /mnt type vfat (rw)」
3 在/temp/目錄下建立乙個檔案,為了簡化,用下面的命令
touch 123.txt
4 把這個檔案複製到/mnt目錄,此時可能需要用到sudo,如下
sudo cp 123.txt /mnt/
5 把掛載到/mnt的test.img解除安裝掉
sudo umount /mnt
此時,用hexdump命令來檢視test.img裡的內容,就可以開始最簡單的fat32的學習了。
下圖是此時我的截圖,這裡只擷取了前面512 bytes的內容,先分析這512 bytes。
在fat32的官方文件裡,最前面512 bytes稱作bios parameters block。它叫什麼名字意義不大,重要的是它能提供給我們什麼資訊。
bytespersector,offset 0xb,2 bytes,這裡是0x200,表示乙個sector是512 bytes。
secpercluster,offset 0xd,1 bytes,這裡是0x01,表示乙個cluster包含1個sector。
rsvdseccnt,offset 0xe,2 bytes,這裡是0x0020,表示reserved sector的數目是32個。
numfats,offset 0x10,1 bytes,這裡是0x02,表示fat表的數目是2個。
totsec32,offset 0x20, 4 bytes,這裡是0x00013880,表示該fat32表一共管理了0x13880個sector。
fatsz32,offset 0x24,4 bytes,這裡是0x00000268,表示乙個fat32表占用0x268個sector。
注意,不要用這個格式往fat12或者fat16上套,它們的含義並不一樣。
到這裡,大致可以知道在該檔案的內容分部情況如下:
rsvdseccnt裡已經包括了bpb和fsinfo各占用的乙個sector,所以,fat1 offset = rsvdseccnt * bytespersector = 0x20 * 0x200 = 0x4000
fat2 offset = fat1 offset + fatsz32 = 0x4000 + 0x268 * 0x200 = 0x4000 + 0x4d000 = 0x51000
data offset = fat2 offset + fatsz32 = 0x51000 + 0x4d000 = 0x9e000
或者,直接就有
data offset = rsvdseccnt * bytespersector + numfats*fatsz32*bytespersector = 0x20 * 0x200 + 0x2 * 0x268 * 0x200 = 0x9e000
這時,再用hexdump命令來檢視在offset 0x9e000的地方是否放著123.txt
hexdump -c -s 0x9e000 test.img
附上截圖如下:
由此可以看到,123.txt確實在這裡,雖然位置有點偏差(為什麼不是在offset 0x9e000,而是0x9e020),這個涉及到fat32對長檔名的支援,稍微複雜,後續文章再說。
FAT32的協議總結
讀了fat32協議等,做了一些工作,學會不少東西,但是也有很多不懂得地方,希望明白人多來指教。在u盤進行fat32格式化後,發現除了mbr,dbr,data資料區外,還有一些資料區。就是用winhex發現的,有些資料段都沒見過,不知道是幹什麼的。就是那兩個unpartitioned space。fa...
FAT32的幾個問題
參考 在 中的mbr和dbr的6處,指出了當前分割槽的扇區數,占用4個位元組。每個扇區是512位元組,那麼最大容量為 2 32 1 512 2tb。fat32是以4個位元組代表1簇,但4個位元組中只用到了低28位 高4位保留 因此有2 28個簇,即268435456簇。如果每簇位4kb,那麼2684...
FAT16和FAT32目錄結構分析
fat16和fat32從原理上看是同一類技術,放在一起分析,有助於了解其細節差異 先回歸一下fat16 fat32 分割槽的大致結構如下 從分割槽結構上看,fat16和fat32目錄結構比較不一樣的地方在於 fat16 多了乙個根目錄區,根目錄區由fdt目標表項組成,每乙個分割槽表項佔32位元組 由...