FAT文件系统
+ -

FAT文件系统数据格式

2021-07-01 147 0

FAT12、FAT16的DBR相同(以下称为FAT)。

FAT12/16格式:

偏移  意义       大小  解释                     
0x00:  JMP指令     3字节  SHORT跳转的话,是一个JMP一个NOP。       
0x03:  OEM标识     8字节  比如MSDOS5.0等字符串。            
0x0B:  每个扇区的字节数 2字节  如:0x0200。                 
0x0D:  每个簇的扇区数  1字节  如:0x01。                  
0x0E:  保留扇区数    2字节  从分区开始到第一个FAT之前的扇区数。      
0x10:  FAT的数量    1字节  一般为2                    
0x11:  根目录最大项数  2字节  根目录文件(夹)个数上限。          
0x13:  分区总扇区数   2字节  这个分区的总大小。              
0x15:  介质类型     1字节  介质类型,如“软盘”“硬盘”。        
0x16:  每FAT扇区数   2字节  单个FAT占用的扇区数。             
0x18:  每磁道扇区数   2字节  每个磁道的扇区数。              
0x1A:  磁头数      2字节  磁头的总数。                 
0x1C:  隐藏扇区数    4字节  DBR前面的扇区数,也就是分区前的扇区数。    
0x20:  保留不用     4字节  FAT32的分区总扇区数。             
0x24:  驱动器数     1字节  驱动器的数量。                
0x25:  当前磁头     1字节  当前使用的磁头。               
0x26:  磁盘扩展参数块  24字节 磁盘扩展参数块。               
0x3E:  引导指令        引导指令。                  
0x1FE: 可引导标识    2字节  0xAA55                    

FAT32文件系统前部有一个由若干个扇区组成的保留区,保留区的大小会记录在引导扇区(文件系统的0号扇区,也称DBR扇区)中,FAT32常见的保留区扇区个数为63。

FAT32文件系统保留扇区的第一个扇区一般叫做DBR,为512个字节。其数据结构如下:

FAT32格式:

偏移  意义      大小  解释                     
0x00:  JMP指令     3字节  SHORT跳转的话,是一个JMP一个NOP。       
0x03:  OEM标识     8字节  比如MSDOS5.0等字符串。            
0x0B:  每个扇区的字节数 2字节  如:0x0200。                 
0x0D:  每个簇的扇区数  1字节  如:0x01。                  
0x0E:  保留扇区数    2字节  从分区开始到第一个FAT之前的扇区数。      
0x10:  FAT的数量    1字节  一般为2。                   
0x11:  保留不用     4字节  FAT12、16的根目录项数、分区总扇区数,此处为0。
0x15:  介质类型     1字节  介质类型,如“软盘”“硬盘”。        
0x16:  保留不用     2字节  FAT12、16的每FAT扇区数,此处为0。       
0x18:  每磁道扇区数   2字节  每个磁道的扇区数。              
0x1A:  磁头数      2字节  磁头的总数。                 
0x1C:  隐藏扇区数    4字节  DBR前面的扇区数,也就是分区前的扇区数。    
0x20:  分区总扇区数   4字节  分区总扇区数。                
0x24:  单个FAT扇区数  4字节  单个FAT占用的扇区数。             
0x28:  FAT是否非镜像  2字节  FAT是否镜像。0:镜像(两FAT一致)1:非镜像  
0x2A:  版本号      2字节  可以为0。                   
0x2C:  根目录起始簇   4字节  根目录的起始位置。FAT32的根目录不固定     
0x30:  FSInfo的扇区号  2字节  以扇区为单位。                
0x32:  DBR备份的扇区号 2字节  以扇区为单位,另一个DBR的备份。        
0x34:  保留未用     12字节 全为0。                    
0x40:  BIOS的设备ID   2字节  也就是用INT 0x13访问此驱动器的时候指定的ID号。
0x42:  磁盘扩展参数块  24字节 磁盘扩展参数块。               
0x5A:  引导指令         引导指令。            
0x1FE: 可引导标识    2字节  0xAA55                    

其中0x42位置的磁盘扩展参数结构如下:

偏移  意义       大小  解释     
0x00:  扩展参数块标识  1字节  值为0x29   
0x01:  分区ID      4字节  随机数,用于区分硬盘。 
0x05:  卷标       11字节 卷标,也就是驱动器的“名字”、“标签” 
0x10:  文件系统类型   8字节  值为“FAT12”、“FAT16”、“FAT32”  

假如有一FAT32的保留区如下图所示:、
1600416077078
使用WINHEX可以查看数据详情
1600416085631

引导代码

FAT文件系统和MBR类似,是将引导代码和数据结构整合在一。引导代码的前2个指令为跳转指令,跳转到配置数据后面的代码;0X90为NOP指令。
在系统的启动过程中,MBR的引导代码找到可引导扇区的引导代码(如FAT32的DBD)并将控件权交给它,由它找到适当的操作系统文件并进行加载。

无论这个FAT卷是不是可引导文件系统,也会存在引导代码。

FSINFO信息扇区

FAT32在保留扇区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量及下一个可用簇的簇号等信息。
FSINFO一般位于保留于的1号扇区中,大小为512字节。

偏移  意义       大小  解释     
0x00:  FSInfo标识    4字节  值为“RRaA”,0x41615252。
0x04:  保留不用     480字节 全为0。
0x1E4: FSInfo标识2   4字节  值为“rrAa”,0x61417272。
0x1E8: 空闲簇数     4字节  统计目前空闲可用的簇数,计算磁盘剩余容量可用。
0x1EC: 下一可用簇号   4字节  下一个可用的簇号。
0x1F0: 保留不用     14字节 全为0。
0x1FE: 可引导标识    2字节  0xAA55 

FAT32保留区的备份

通常情况下,文件系统的2号扇区结尾也会被置为55AA.6号扇区会有一个引导扇区的备份,7号扇区也会有一个扇区备份FSINFO.8号扇区也有一个是2号扇区的备份,也有一个55aa标志。

0 篇笔记 写笔记

FAT文件系统数据格式
FAT12、FAT16的DBR相同(以下称为FAT)。FAT12/16格式:偏移 意义      大小 解释                     0x00: JMP指令    3字节 SHORT跳转的话,是一个JMP一个NOP。       0x03: OE......
Windbg 数据格式命令n
无论在那条指定里都会涉及这个问题:数制,语法。Windbg支持C++和MASM两个表达式格式,@@用于即时改变语法格式,即在MASM下使用@@指令来使用C++的语法解释器,反之亦然。 Windbg数制的表示0x表示16进制,0n表示10进制,0t表示8进制,0y表示2进制;Windbg默认数......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!