0

我有一个包含以下信息的 FAT16 驱动器: 在此处输入图像描述 每扇区字节数:512 字节 (0x200)

每个集群的扇区数:64 (0x40)

保留扇区:6 (0x06)

FAT 数量:2 (0x02)

根条目数:512 (0x0200)

扇区总数:3805043 (0x3a0f73)

每个文件分配表的扇区数:233 (0xE9)

根目录位于扇区 472 (0x1d8) 在此处输入图像描述

我正在寻找包含以下详细信息的文件:

文件名称:LOREMI~1

文件扩展名:TXT

文件大小:3284 字节 (0x0cd4)

第一个集群:660 (0x294)

但是,我承认文件簇的开始位于扇区 42616。我的问题是我应该使用什么等式来产生 42616? 在此处输入图像描述

我很难弄清楚这一点,因为除了 Tavi Systems 制作的教程之外几乎没有任何关于此的信息,但涉及此的部分很难理解。

4

1 回答 1

0

实际上,FAT 文件系统有很好的文档记录。Microsoft 的官方 FAT 文档可以通过文件名fatgen103找到。

目录条目LOREMI~1.TXT可以在根目录中找到,并且以长文件名条目(xt, lorem ipsum.tlorem ipsum.txt)开头,目录条目记录在《FAT 目录结构》一章中;如果是 FAT16,您对第 26 到第 28 个字节感兴趣以获取簇地址( DIR_FstClusLo),即(小端序!)0x0294(或 660₁₀)。

根据您提供的 BPB 标头信息,我们可以像这样计算数据扇区:

data_sector = (cluster-2) * sectors_per_cluster + 
              (reserved_sectors + (number_of_fats * fat_size) +
               first_data_sector)

为什么cluster-2?因为 FAT 文件系统中的前两个簇总是为 BPB 头块以及 FAT 本身保留,请参阅fatgen103.doc.

为了让我们解决这个问题,我们仍然需要确定根目录条目的扇区跨度。对于 FAT12/16,可以这样确定:

first_data_sector = ((root_entries * directory_entry_size) +
                     (bytes_per_sector - 1)) // bytes_per_sector

根据规范,目录条目大小始终为 32 字节(请参见 中的 «FAT 目录结构» 一章fatgen103.doc),现在已知所有其他值:

first_data_sector = ((512*32)+(512-1)) // 512 → 32
data_sector = (660-2)*64+(6+(2*233)+32) → 42616
于 2022-02-04T01:08:10.203 回答