复合文档二进制存储结构通俗讲义及文件头的修复

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复合文档二进制存储结构通俗讲义

作者dengyanhui

首先,大家可以将复合文档与FAT文件系统对比起来学习,复合文档和FAT文件系统有许多相似之处。

1.复合文档类似于FAT文件系统,大家在理解的时候可以把复合文档和文件系统放到同

一个层次;

2.FAT文件系统有DBR ,FAT表目录。那么对应的复合文档就是文件头,主扇区配置

表(MSAT),扇区配置表(SAT),短扇区配置表(SSAT)和复合文档的目录;

3.在FAT文件系统中,文件采用扇区为单位存储数据,多个扇区组成簇,文件占用多少

个簇,占用了哪些簇,簇链是怎样的这个就是由FAT表记录的。相对应的复合文档中,数据也采用扇区来存储数据,只是复合文档中的扇区有基本扇区和短扇区之分。在文件系统中一个扇区占用512个字节,在复合文档中,扇区的大小在文件头中有规定,不过基本都是512个字节。短扇区的大小也在文件头中作出了规定。一般是64个字节。

4.在复合文档中,数据信息被叫做流,按照流的大小有基本流和短流之分,按照功能来

分,有控制流和数据流之分;流相当于文件系统中的文件,文件系统中的文件夹在复合文档中就对应仓库。那么流存在哪里呢?文件系统中数据以扇区来存储,在复合文档中,基本流以扇区来存储,短流由短扇区来存储。而多个短流就组成短路存放流,而且短流存放流是以扇区来存储的;这里给大家总结一下:

●流以扇区来存储;

●短流以短扇区来存储;

●短流组成短流存放流,短流存放流也是以扇区来存储的;

●在文件系统中文件以簇来管理,多少个扇区组成一个簇,在DBR中有记录,相应

的在复合文档中,基本流的大小也是在文件头中记录的,一般是8个扇区,也就

是说基本流的大小相当于簇的大小一样;

5.在文件系统中,FAT表管理文件的簇链,而在复合文档中,这个工作交给了主扇区配

置表,扇区配置表,短扇区配置表这三个配置表。

●上述三个配置表记录的和FAT表记录的都是表明扇区或者簇的占用情况的;只是

在复合文档中区分的更细致;

●MAST记录的是SAT的占用扇区情况,也就是说,MAST的功能就是记录SAT

占用了哪些扇区,哪些扇区的编号是多少,只是我们这里叫做SID;

●SAT记录的就是一个流占用扇区的情况,一个流占用哪些扇区,哪些扇区的SID

是多少;

●SSAT记录的就是短流占用扇区的情况;

●这些配置表的大小,起始扇区在文件头中都有记录的就像文件系统的DBR记录

FAT表的大小一样。

6.目录(directory)就是一种控制流,由一些列的目录入口(directory entry)组成,每

一个目录入口就指向一个流或者仓库。

7.下面给出复合文档的大概存储结构的实例分析:

这个就是复合文档的文件头,我们逐一分析

1.DO CF 11 E0 A1 B1 1A E1 复合文档的文件标示;

2.接下来的16个字节表示此文件的唯一标识(不重要,可以全为0;

3.接着的两个字节表示文件格式修订号3E 00;

4.接着的是文件格式版本号03 00;

5.接着是字节顺序规则标识FE FF 表示字节按小头排序,FF FE表示按大头排序;

6.接着的四个字节表示复合文档扇区的字节数以2的冥形式表示这里是09 00 那么

扇区的字节数就是2的9次方也就是512个字节;

7.接下来的四个字节表示短扇区的字节数,同上,这里是06 00 也就是2的6次方个

字节,这里就是64个字节;

8.接下来的10个字节没有使用,全是0;

9.接着的4个字节表示SAT配置表占用的扇区数,这里是01 00 00 00 也就是说扇区

配置表占用1个扇区;

10.接着的4个字节表示存放目录流的第一个扇区的扇区ID 也就是SID;

11.接着的4个字节没有使用;

12.接着的4个字节表示标准流的最小大小,小于这个值的就是短流;

13.接着的4个字节表示存放短扇区表(SSAT)的起始扇区号。如果不存在短扇区配置

表则此处值为FE FF FF FF;

14.接着的4个字节表示存放短扇区配置表的扇区总数;

15.在往下的4个字节表示存放主扇区配置表(MSAT)的起始扇区号,如果没有则为

FE FF FF FF;这里说明一下,这里说的存放主扇区配置表的扇区,因为主扇区配置表的前109个SID是存储在文件头中的,如果主扇区配置表内容太多,文件头中存放不下,那么系统会为主扇区配置表分配其他扇区来存放它。这里的4个字节所指的扇区就是额外扇区。这里的实例是FE FF FF FF 说明主扇区配置表的内容在文件头中就能存储下了,不需要分配额外的扇区来存储了,所以这里就是FE FF FF FF ;

16.接下来的4个字节表示存放主扇区配置表的扇区数,这里所指的扇区也是上述的额

外扇区;

17.在往下就是主扇区配置表存储在文件头中的SID了。一个SID占用4个字节,这个

和FAT表中一个FAT项占用4个字节一样;这个实例中,因为前面已经得出SAT 只占用1个扇区,所以这里就只有一个SID了。这里是29 00 00 00 也就是说SAT 从41+1号扇区开始,占用1个扇区。我们的42号扇区存放的就是SAT的内容。为什么是41+1呢?因为29 00 00 00 用十进制表示就是41,而我们的文件头要占用一个扇区,所以我们的SAT就从41+1号扇区开始了;

好的,当我们的复合文档文件头受损时,我们就只需要复制一个正常复合文档的文件头,然后修改上述参数就行了。

下面我们来逐个分析上述参数。

1.主扇区配置表,这里已经分析过来,这里的主扇区配置表就只有一个SID,就没必

要其他的扇区来存放它的内容了,MSAT的前109个项存放在文件头中,如果MSAT 有大于109个项的内容,系统才会分配其他扇区来存放多出来的项。

2.扇区配置表(SAT),我们从文件头中看到SAT占用一个扇区,起始扇区记录在MAST

中,这里就是MAST的第一个项,29 00 00 00 也就是41+1 ,为什么要加1,我前面已经说过了。我们就转到42号扇区看看扇区配置表(SAT)长什么样。

相关文档
最新文档