FAT16
结构
DBR跳转指令:EB 3C 90
OEM代号:windows95为“MSWIN4.1 Windows98为:”MSWIN4.1‘
Windows 200以上为:“MSDOS5.0”
BPB:从0x0B—0x3D
0x0B-0x0C 每扇区字节数(为512) 2 字节
0x0D 每簇扇区数 1字节
0x0E-0x0F DBR保留扇区数 2字节
0x10 FAT表个数 1字节
0x11-0x12 根目录项数 2字节
0x13-0x14 大小(分区小于32MB时在这) 2字节
0x15 介质描述 1字节
0x16-0x17 每FAT扇区数 2字节
0x18-0x19 每磁道扇区数(一般为63) 2字节
0x1A-0x1B 磁头数(一般为256) 2字节
0x1C-0x1F 隐藏扇区数 4字节
0x20-0x27 大小(大于32MB时在这) 4字节
BPB算法
根目录项数:根目录扇区数 - 根目录后面的“.”和“..”目录 * 512 / 32
FDT:根目录项数*32/512
DBR保留扇区数 :FAT1-DBR
每FAT扇区数(FAT大小) :FAT2-FAT1
每簇扇区数:(1)分区大小-DBR保留扇区数-2*每FAT扇区数-FDT占用扇区数
(2)(FAT表大小*512)/2
(3)用(1)/(2)要四舍五入
FAT表(以F8 FF开头)
每个FAT项都有一个固定的编码,这个编号从0开始,第一个FAT项就是0号FAT项,第二个FAT项是1号FAT项。从2号FAT项开始跟数据中的第一个簇映射。
FAT1后面紧跟着FAT2(FAT2为FAT1的备份)
定位FAT表的方法
方法一:
首先定位FAT1,读取DBR中的0x0E-0x0F中的数值(2字节)记录下来
从主DBR向后跳转这个值(Alt+G)
注意:跳转的进制数为10进制,单位为扇区
跳转后(FAT1)
然后从FAT1定位FAT2读取DBR中的每FAT扇区数1x16-1x17 两字节,记录下来
从FAT2向后跳转这个数值
跳转后
方法二:
直接在DBR往下搜索 (ctrl+alt+x0) F8 FF (512=0) 定位FAT1
跳转后
继续在FAT1往下搜索F8 FF FF 定位FAT2 注意:按F3为继续搜索)
跳转后
FDT(根目录,紧跟在FAT2后面):
头:D0 C2 BC D3
定位FDT方法
方法一:
读取DBR中的DBR保留扇区数0x0F-0x0E 2字节,每FAT扇区数1x16-1x17 2字节,记录下来
用DBR保留扇区数+(2*每FAT扇区数)+DBR扇区数,然后从DBR往后跳转
方法二:
直接从FAT2往下搜索D0 C2 BC D3来定位
提取文件:
读取文件的簇号,和大小记录下来。
2*每FAT扇区数+DBR保留扇区数+FDT占用扇区数(一般为32)+(文件簇数-2)*每簇扇区数+DBR扇区数 从DBR跳转(Alt+G)
如果文件头显示E5表示文件已删除
FAT32
结构:
1.跳转指令:EB 58 90
2.OEM代号:MSDOS5.0
3.BPB:
0x0B-0x0C 每扇区字节数 2字节
0x0D 每簇扇区数 1字节
0x0E-0x0F DBR保留扇区数 2字节
0x10 FAT表个数(固定为2) 1字节
0x11-0x14 未用 4字节
0x15 介质描述 1字节
0x16-0x17 未用 2字节
0x18-0x19 每磁道扇区数 2字节
0x1A-0x1B 磁头数 2字节
0x1C-0x1F 隐藏扇区数 4字节
0x20-0x23 大小 4字节
0x24-0x27 每FAT扇区数 4字节
0x28-0x29 标记 2字节
0x2A-0x2B 版本 2字节
0x2C-0x2F 根目录首簇号 4字节
0x30-0x31 文件系统信息扇区号 2字节
0x32-0x33 DBR备份扇区数(固定为6) 2字节
4.BPB算法
BDR保留扇区数:FAT1-DBR
每簇扇区数:(1)大小-DBR保留扇区数-2*每FAT扇区数
(2)每FAT扇区数*512/4
(3)用(1)-(2)
每FAT扇区数:FAT2-FAT1
定位FAT表(F8 FF FF 0F):
从3号簇开始记录,每个簇占用4个字节
FAT2 为 FAT1 的备份
方法一:
读取DBR的DBR保留扇区数 0x0E-0x0F 2字节,和每FAT扇区数 0x24-0x27记录下来
定位到主DBR扇区数,从DBR往后跳转(Alt+G) DBR保留扇区数 到FAT1
然后从FAT1往后跳转(Alt+G) 每FAT扇区数
方法二:
从DBR向下搜索(Ctrl+Alt+X) F8 FF FF 0F 512=0
跳转后到FAT1
继续从FAT1向下搜索F8 FF FF 0F到FAT2(注意:按F3为继续搜索)
根目录位置定位(D0 C2 BC)
方法一:
读取DBR的每FAT扇区数和DBR保留扇区数
计算 根目录位置:每FAT扇区数*2+DBR保留扇区数+DBR保留扇区数 从DBR跳转
然后从DBR跳转(Alt+G)
方法二:
从FAT2跳转每FAT扇区数
方法三:
从DBR往下搜索D0 C2 BC
定位文件数据区
读取文件的簇号和文件的大小
计算数据区:
方法一
2*每FAT扇区数+DBR保留扇区数+(簇号-2)*每簇扇区数(从DBR跳转)+DBR保留扇区数
方法二
(簇号-2)*每簇扇区数+根目录
注意:如果出现“.”和“..”目录就继续计算并跳转