最近写了个分析FAT32文件系统根目录文件信息的程序,现在小记一下。
一、结构分析
先上结构图如下:
图(1)、FAT文件系统结构图
注:
-
第一个保留区大小N(单位:扇区):由MBR中 0x1c6~0x1c9(454开始)的四个字节决定。
-
第二个保留区大小M(单位:扇区):由DBR中 0x0e~0x0f(14开始)的两个字节决定。
-
每个FAT表大小K(单位:扇区):由DBR中 0x24~0x27(36开始)的四个字节决定。
二、主引导扇区组成
主引导扇区:硬盘的第一个扇区(0柱面 0磁头 1扇区),它由主引导记录(MBR)、主分区表即磁盘分区表(DPT)和引导扇区标记(Boot Record ID / Signature)三部分组成,是完成系统BIOS向操作系统交接的重要入口。该扇区在进行硬盘分区时产生。
图(2)、主引导扇区内容
注:
-
主引导扇区内容:蓝色下划线部分为分区表。
-
主分区表第一分区表项内容:紫色部分(4字节):决定相对扇区数,即从该磁盘开始到该分区开始的偏移量;黄色部分(4字节):决定总扇区数。
三、操作系统引导扇区组成
DBR区,即操作系统引导记录区,也就是引导扇区。通常占用分区的第0扇区,共512字节(特殊情况也要占用其他保留扇区)。这512字节中的内容由跳转指令、厂商标志和操作系统版本号、BPB(BIOS Parameter Block)、扩展BPB、OS引导程序、结束标志组成。
注:
-
DBR各部分划分(整体):
-
DBR内容细节划分:
四、FSINFO扇区
FAT32在保留区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量以及下一个可用簇的簇号等信息,以供操作系统作为参考。FSINFO信息扇区一般位于文件系统的1号扇区。
注:
-
内容细节划分:
五、FAT表
FAT(File Allocation Table),即文件分配表(共两个且完全相同)。
注:
-
内容解析:
六、根目录表
目录所在的扇区,都是以 32 Byte 为一个单位划分,每个单位称为一个目录项。根目录由若干个目录项组成,一个目录项占用32个字节,可以是长文件名目录项、文件目录项、“.”目录项和“..”目录项等等。
注:
-
图中框出四个文件:
-
短文件名目录项参数:
-
长文件名目录项参数(除第1项,第1项以短文件名方式存储):
-
输出文件名(大小写敏感):
-
由文件目录项得到首簇号,再通过查FAT表,即可得到文件的簇号链,簇号对应位置内即为存储的文件内容。
此处以big.txt文件为例
大小:0x0001425c,即:81 Kb
首簇号为:0x0006,即第 6 簇
簇号链为:6 -> 7 -> 8 -> 9 -> 10 -> 11 -> 12 -> 13 -> 14 -> 15 -> 16
文件内容如下图所示(仅展示第6簇第1扇区内容):
第6簇第1扇区内容(全为8)
注:FAT32 文件系统单个文件大小不得超过 4 G:
每个文件的大小由 4 个字节来表示
每个字节 8 位,共 2 的 32 次方 B,即:4294967296 B
4294967296 / 1024 = 4194304 K
4194304 / 1024 = 4096 M
4096 / 1024 = 4 G (即最大 4 GB)
代码太丑,就不放了!