FAT32:
总结构:
MBR |
|
DBR |
|
备份 |
|
FAT表1 |
|
FAT表2 |
|
数据区 |
DBR重要偏移描述:
偏移 |
解释 |
备注 |
00-02 |
跳转指令 |
固定EB5890 |
0B-0C |
每扇区字节数 |
固定0002 |
0D |
簇大小 |
具体算法☆ |
0E-0F |
DBR保留扇区 |
具体算法★ |
10 |
FAT表个数 |
固定为02 |
1C-1F |
起始扇区 |
DBR |
20-23 |
扇区总数 |
容量○ |
24-27 |
FAT表大小 |
具体算法● |
FE-FF |
结束标志 |
固定55AA |
重建FAT32的DBR:从其他分区复制一个完好的FAT32的DBR
①☆簇大小={(扇区总数-2✖FAT表大小-DBR保留扇区)/512}✖4
②★DBR保留扇区=FAT表1起始-DBR(向下搜索F8FFFF0F找到FAT表1的起始)
③●FAT表大小=FAT表2起始-FAT表1起始(再次向下搜索F8FFFF0F找到FAT表2起始)
④○容量=DBR下一扇区的E8-EC的数据✖簇大小(得到的是大概值,向上下搜索!00即可)
根目录重要偏移描述:
相对偏移 |
解释 |
备注 |
00-07 |
文件名 |
没用到的为20 |
08-0A |
扩展名 |
|
0B-0B |
文件属性 |
|
14-15 |
文件起始簇号 |
高位 |
1A-1B |
文件起始簇号 |
低位 |
1C-1F |
文件大小 |
字节数 |
文件属性解析:
00000000(读/写)、00000001(只读)、00000010(隐藏)、00000100(系统)、00001000(卷标)、00010000(子目录)、00100000(存档)
下图为根目录的某个文件描述结构图:
手工提取文件:
找到根目录:固定在2号簇
根目录起始扇区=FAT表大小✖2+DBR保留扇区+DBR起始扇区
根目录中每32字节描述一个文件记录,记录中相对偏移14-15为文件起始
簇号的高位,1A-1B为文件起始簇号的低位,偏移1C-1F为文件大小(字节数)。
例子:
所以该文件为1.doc,起始簇号为00 00 00 0C(高位从右往左读,低位一样)
文件大小为00 26 00 00(16进制字节数)
文件起始位置=(文件起始簇号-2)✖簇大小+DBR+根目录起始扇区
如何 在没有FAT表的情况下提取碎片:
首先看DOC文件头的最后一个扇区分配表,然后所得的值MOD 128(一个配置表可以记录128个扇区),再乘以4后,向下搜索FDFFFFFF,且偏移为512=取余后乘以4的值。
本文地址:https://bolg.xs357.com/post-111.html
未标注转载均为本站远程,转载请注明文章出处: