FAT32结构:
FAT32与FAT16区别在于FAT32没有FDT根目录,根目录直接包含在DATA区中,FAT表中每簇对应的表项也是四个字节
MBR |
DBR及其保留扇区 (DBR是DOS引导目录,也称为操作系统引导目录) |
FAT1 |
FAT2 |
DATA |
12.FAT32DBR分析
(1)跳转指令
跳转指令占用2字节,它将程序执行流程跳转到引导程序处
注意:跳转指令的第二个字节,也就是58,包括90空指令,OEM代号以及BPB参数
剩下的就是引导程序,结束标志
***:DBR有一个备份,在六号扇区
(2)OEM代号
OEM代号占8字节,由厂商具体安排
(3)BPB参数
字节偏移 | 字段长度 | 字段名 | 字节偏移 | 字段长度 | 字段名 |
0X0B | 2 | 每扇区字节数 | 0X28 | 2 | 标记 |
0X0D | 1 | 每簇扇区数 | 0X2A | 2 | 版本 |
0X0E | 2 | 保留扇区数 | 0X2C | 4 | 根目录首簇号 |
0X10 | 1 | FAT表个数 | 0X30 | 2 | 文件系统信息扇区号 |
0X11 | 2 | 未用 | 0X32 | 2 | DBR备份扇区数 |
0X13 | 2 | 未用 | 0X34 | 12 | 保留 |
0X15 | 1 | 介质描述符 | 0X40 | 1 | BIOS驱动器号 |
0X16 | 2 | 未用 | 0X41 | 1 | 未用 |
0X18 | 2 | 每磁道扇区数 | 0X42 | 1 | 扩展引导标记 |
0X1A | 2 | 磁头数 | 0X43 | 4 | 卷序列号 |
0X1C | 4 | 隐藏扇区数 | 0X47 | 11 | 卷标 |
0X20 | 4 | 扇区总数 | 0X52 | 8 | 文件系统类型 |
0X24 | 4 | 每FAT扇区数 |
- 引导程序
FAT32的DBR引导程序占用420字节
- 结束标志
DBR的结束标志与MBR的结束标志相同,都为“55 AA”
FAT即文件分配表,对于FAT文件系统来讲是至关重要的组成部分。
- FAT文件系统有两份FAT,FAT2为FAT1的备份
- FAT表由FAT表项构成,FAT表项简称为FAT项。FAT32的每个FAT项对应4个字节
- 每个FAT项都有固定的编号,编号从0开始
- FAT表前两个FAT项有专门用途,0号FAT项通常用来存放分区所在介质类型,例如硬盘的介质类型为“F8”,1号FAT项则用来存储文件系统的肮脏标志
- 分区的数据区中每一个簇都会映射到FAT表中的唯一一个FAT项。因为0号FAT项和1号FAT项有特殊用途,所以数据区的第一个簇也就是编号为2号簇,这也就是没有0号簇和1号簇的原因
13.FAT32提取文件
(1)在MBR中查看隐藏扇区数,跳转到DBR
(2)在DBR中查看重要信息,例如,保留扇区数8282
FAT表大小:16339 每簇扇区数:8
(3)由DBR跳转保留扇区数到FAT1,由FAT1跳转FAT表大小到FAT2,FAT2跳转FAT表大小到DATA
(4)DATA表中分析文件起始簇号,文件大小
1.jpg:起始簇号4 文件大小845941字节
Jpg文件夹:起始簇号211 文件夹没有文件大小,跳转到211簇的话就是一个新的目录了,在这个目录下才可以找到文件夹目录下的文件簇号和大小
123.txt:起始簇号3 文件大小11字节
- 计算文件所在簇
(文件起始簇号-2)*每簇扇区数=跳转扇区数
14,FAT32文件删除与误格式化现象
删除前:
FAT表:
根目录(DATA):
文件目录:
删除后:
FAT表:
根目录(DATA):
文件目录:
现象:
FAT表数据区清空,DATA区文件夹首字节变为E5,代表文件夹被删除,文件目录区没有改变
格式化前:
FAT表:
DATA区:
文件:
格式化后:
FAT表:
DATA区:
文件:
现象:
FAT表数据区清空,DATA表清空,文件内容依然存在
误格式化与删除类似,暂时帮你存储已经删除的内容,当你存放数据后,可能就会被覆盖,导致无法修复
15.FAT32DBR修复
方法一:从DBR跳转六个扇区中有备份DBR,可直接进行复制
方法二:和FAT16类似
修改FAT32DBR时需要修改的数据有隐藏扇区数、分区总大小、保留扇区数、FAT表大小、每簇扇区数
- 新建一个FAT32文件系统将其复制粘贴到被破坏FAT32的DBR处
- 计算保留扇区数
从DBR处向下搜索“F8FFFF0F”,到达FAT1
FAT1所在的扇区号-DBR所在扇区号=保留扇区数大小
- 计算FAT表大小
从FAT1向下搜索“F8FFFF0F”,到达FAT2
FAT2所在的扇区号-FAT1所在的扇区号=FAT表大小
- 查看隐藏扇区数大小与分区大小
从MBR的分区表查看分区的隐藏扇区数大小和分区大小
- 计算每簇扇区数
数据区总扇区数/数据区总簇数=每簇扇区数
数据区总扇区数=分区大小-2*FAT表大小-保留扇区数大小
数据区总簇数=512*FAT表大小/4
六、将计算的重要数据填入被破坏FAT32文件系统DBR中对应的位置