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