使用winhex查看FAT16格式结构
winhex介紹
winhex可以直接查看磁盤二進(jìn)制信息, 可以比較直觀地查看到各種文件系統(tǒng)格式的區(qū)別.
winhex使用
- 查看硬盤要管理員權(quán)限, 即啟動(dòng)的時(shí)候要用郵件管理員權(quán)限啟動(dòng)
- 點(diǎn)擊Tools->Open Disk查看硬盤
- 磁盤瀏覽界面字體如果太小, 可以在Option->General->Font(右下角)調(diào)整
- View->Show->Data Interpreter打開光標(biāo)數(shù)值實(shí)時(shí)查看懸浮窗
- 在懸浮窗上右鍵點(diǎn)Option, 可以調(diào)整展示的內(nèi)容以及切換符號/無符號顯示
- 默認(rèn)為Little Endian, 可以改為Big Endian
- 磁盤瀏覽界面
- 每行16個(gè)byte
- 在Offset這一列上左鍵點(diǎn)擊可以切換十進(jìn)制和十六進(jìn)制顯示, 非常有用
- 點(diǎn)擊具體地址, 在底欄會顯示當(dāng)前sector, 偏移量(地址), 值(無符號byte),
- 選擇區(qū)域, 在底欄會顯示block區(qū)間, 大小(非常有用)
- 在右側(cè)ANSI ASCII這一列抬頭上點(diǎn)擊左鍵, 可以切換為UTF-8等編碼顯示
- 二進(jìn)制區(qū)
- Navigation->Position Manager, 可以分不同顏色添加自定義區(qū)域, 很直觀, 非常有用
- Navigation->Go To Offset可以從當(dāng)前位置快速定位到指定偏移量位置, 非常有用
- 雙擊磁盤, 會打開內(nèi)容瀏覽界面, 顯示的是磁盤內(nèi)部文件, 包含已刪除文件
FAT16的基本結(jié)構(gòu)
FAT16文件系統(tǒng)的基本結(jié)構(gòu)依次為: DBR扇區(qū), FAT表1, FAT表2, 根目錄, 數(shù)據(jù)區(qū).
MBR區(qū)(主引導(dǎo)扇區(qū))
MBR(Main Boot Record), 按其字面上的理解即為主引導(dǎo)記錄區(qū), 位于整個(gè)硬盤的0磁道0柱面1扇區(qū). 在總共512字節(jié)的主引導(dǎo)扇區(qū)中, MBR只占用了其中的446個(gè)字節(jié)(偏移0 - 偏移1BDH), 另外的64個(gè)字節(jié)(偏移1BEH - 偏移1FDH)交給了DPT(Disk Partition Table硬盤分區(qū)表), 最后兩個(gè)字節(jié)55 AA(偏移1FEH - 偏移1FFH)是分區(qū)的結(jié)束標(biāo)志. 這個(gè)整體構(gòu)成了硬盤的主引導(dǎo)扇區(qū).
主引導(dǎo)記錄中包含了硬盤的一系列參數(shù)和一段引導(dǎo)程序。其中的硬盤引導(dǎo)程序的主要作用是檢查分區(qū)表是否正確并且在系統(tǒng)硬件完成自檢以后引導(dǎo)具有激活標(biāo)志的分區(qū)上的操作系統(tǒng), 并將控制權(quán)交給啟動(dòng)程序.
MBR是由分區(qū)程序(如fdisk)所產(chǎn)生的, 它不依賴任何操作系統(tǒng), 而且硬盤引導(dǎo)程序也是可以改變的, 從而實(shí)現(xiàn)多系統(tǒng)共存.
DBR扇區(qū)
DBR(Dos Boot Record)是操作系統(tǒng)引導(dǎo)記錄區(qū), 它通常位于硬盤的0磁道1柱面1扇區(qū), 是操作系統(tǒng)可以直接訪問的第一個(gè)扇區(qū), 它包括一個(gè)引導(dǎo)程序和一個(gè)被稱為BPB(Bios Parameter Block)的本分區(qū)參數(shù)記錄表. 引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時(shí),判斷本分區(qū)跟目錄前兩個(gè)文件是不是操作系統(tǒng)的引導(dǎo)文件(以DOS為例, 即是 IO.SYS 和 MSDOS.SYS), 如果確定存在, 就把其讀入內(nèi)存, 并把控制權(quán) 交給該文件. BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū), 結(jié)束扇區(qū), 文件存儲格式, 硬盤介質(zhì)描述符, 根目錄大小, FAT個(gè)數(shù), 分配單元的大小等重要參數(shù).
下面是從一個(gè)2G的TF卡上得到的DBR扇區(qū)實(shí)際數(shù)據(jù)
EB3C90 4D53444F53352E30 0002 40 0800 02 0002 0000 F8 <- nc EC00 3F00FF0087000000 <- nc 79CF 3A00000029A8E6B3004E4F204E414D4520202020 <-nc 4641543136202020首先說明一下數(shù)據(jù)格式, 這些是Little Endian格式的數(shù)據(jù), 在單個(gè)byte時(shí)可以直讀, 但是在多個(gè)byte時(shí), 高位是在右側(cè)的, 例如 '00 02'代表的其實(shí)是'02 00'即512, '00 FF'代表的是'FF 00'即65280. 下面是具體每一段的數(shù)值說明:
FAT1, FAT2
簇的鏈表. 在根據(jù)目錄項(xiàng)獲取文件的首簇號后, 在FAT 找到對應(yīng)的簇, 可以找到下一個(gè)簇, 一直到文件結(jié)束. 對于FAT16, 每個(gè)簇用16Bit來表示, 而對于FAT32, 使用32Bit來表示. 這是兩者之間的重要區(qū)別.
根據(jù)上面的分析得知, FAT1和FAT2的起始位置在 0x1000, 長度為 0x1D800, 分區(qū)開始位置在10E00, 所以
- BDR: 0x10E00, 長度0x1000
- FAT1: 0x11E00, 長度0x1D800
- FAT2: 0x2F600, 長度0x1D800
- 根目錄: 0x4CE00
DIR區(qū), 根目錄區(qū)
根目錄的作用就是有文件或者目錄的首簇號, 以及文件的長度(目錄的長度是0). FAT16中, 根目錄的所占空間可以根據(jù)BPB中的參數(shù) - Maximum Root Directory Entries(0x11, 2bytes).
FAT16短文件目錄項(xiàng), 每32個(gè)字節(jié)表示一個(gè)文件(文件夾也是), 下面是一個(gè)實(shí)際的數(shù)據(jù)例子
4170006500740065 0031000F00EE2E006D00700033000000FFFF0000FFFFFFFF <-nc 5045544531202020 4D5033 20 0000094DD450F1500000 <- nc C64C D450 9925 53D13B004170006500740065 0032000F00022E006D00700033000000FFFF0000FFFFFFFF <-nc 5045544532202020 4D5033 20 0000094DD450F1500000 <-nc CD4C D450 1126 72C745004170006500740065 ...間隔著驅(qū)動(dòng)器的信息(32Byte)
然后是文件信息(32Byte)
然后又是驅(qū)動(dòng)器信息(32Byte)
數(shù)據(jù)區(qū)
文件等數(shù)據(jù)待的地方. 緊跟著根目錄. 從2號簇開始.
參考
- 解析FAT16文件系統(tǒng) http://blog.chinaunix.net/uid-23247212-id-327574.html
- FAT16文件系統(tǒng)格式說明 https://blog.csdn.net/deng0zhaotai/article/details/6933336
- Windows文件系統(tǒng)功能比較 https://docs.microsoft.com/zh-cn/windows/win32/fileio/filesystem-functionality-comparison
總結(jié)
以上是生活随笔為你收集整理的使用winhex查看FAT16格式结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高级软考项目管理课第一章后习题
- 下一篇: Revit开发之快捷键相关类