且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

更新时间:2022-01-30 12:56:06

本节书摘来自异步社区《NTFS文件系统扇区存储探秘》一书中的第2章,第2.4节,作者:宋群生 , 宋亚琼著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 FAT32扇区寻址实例分析

NTFS文件系统扇区存储探秘
现在以作者的1号硬盘中的H盘为例,说明对FAT32文件系统各部分扇区的寻址计算方法。

根据2.2节中的扇区号备查文件记录,可以读出H盘存储分区链表的扇区号。因为每一个逻辑驱动器备份两个扇区数据,所以与H盘对应的扇区应该是第11和第12个记录。第11个记录是分区链表扇区号,读出其值是“20964825”,第12个记录是分区引导记录的首扇区号。

运行“查看硬盘扇区数据.EXE”程序,将“20964825”号扇区的数据显示在对话框中,程序的运行结果如图2-8所示。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

因为H盘不是第一个逻辑驱动器,所以在图2-8所示对话框显示的数据中,没有主引导记录,只有分区链表。

找到字节位移1c6H开始的4字节,也就是字节编号455-458,扇区数据中的字节值是“3F 00 00 00”,换算成十进制是“63”。

这个数值是系统隐藏的扇区数,用20964825加上63,就得到分区引导记录的首扇区号是“20964888”。

运行“查看硬盘扇区数据.EXE”程序,将“20964888”号扇区的数据显示在对话框中,程序的运行结果如图2-9所示。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

FAT32文件系统的分区引导记录有两个相同的拷贝,每个拷贝占用6个扇区。所以将扇区号20964888加上6,就得到第二份拷贝的首扇区号是“20964894”。

运行“查看硬盘扇区数据.EXE”程序,将“20964894”号扇区的数据显示在对话框中,程序的运行结果如图2-10所示。

将图2-9所示的对话框与图2-10所示的对话框的内容比较一下,可以发现它们完全一样。

现在计算第一FAT表的首扇区地址。前面曾讲过,FAT32文件系统的分区引导记录一共保留了32个扇区。所以用分区引导记录的首扇区号加上32,就得到第一FAT表的首扇区地址,计算方法是20964888+32=20964920。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

运行“查看硬盘扇区数据.EXE”程序,将“20964920”号扇区的数据显示在对话框中,程序的运行结果如图2-11所示。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

在图2-11所示的对话框显示的数据中,前两个字节的值是“F8 FF”,这是FAT表的首扇区标志,不管是FAT16文件系统,还是FAT32文件系统,都具有这种扇区特征。

要继续计算第二FAT表的首扇区地址,首先必须根据某一个字段值计算出每个FAT表占用的扇区数。

参考第1章中表1-3的内容,知道在FAT32文件系统的BPB表中,每个FAT表占用的扇区数,记录在分区引导记录扇区中的第37-40的4字节中。

在图2-9或图2-10中,读出该字段的值是“0D 27 00 00”,十六进制是“270dH”,十进制是“9997”。于是就得到第二FAT表首扇区地址的计算方法是20964920+9997=20974917。

运行“查看硬盘扇区数据.EXE”程序,将“20974917”号扇区的数据显示在对话框中,程序的运行结果如图2-12所示。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

将图2-11所示的对话框与图2-12所示的对话框中显示的数据比较一下,可以发现它们完全相同。

因为FAT32文件系统没有FDT表,所以找到第二FAT表以后,最后查找的就是数据区DATA了。用第二FAT表的首扇区号,加上每个FAT表占用的扇区数,就得到数据区的首扇区地址。计算方法是20974917+9997=20984914。

运行“查看硬盘扇区数据.EXE”程序,将“20984914”号扇区的数据显示在对话框中。为了验证该扇区是DATA的首扇区,仍然采用以前的方法,将其前一个扇区的数据并列显示出来,进行比较判断。程序的运行结果如图2-13所示。

如图2-13所示,左边对话框显示的是前一个扇区的数据,全部字节都是0,由此可以验证计算结果是正确的。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析

前面曾讲过,FAT32文件系统将文件目录登记项作为数据对待,也存储在数据区中,存储格式与FAT16基本相同。现在将图2-13右边对话框中的数据,用字符方式显示出来验证一下。为了使字符显示的效果好一些,可以运行16位程序READSF.EXE,程序运行后的显示界面如图2-14所示。

《NTFS文件系统扇区存储探秘》——2.4 FAT32扇区寻址实例分析