查看文章 |
复合文档二进制结构(.db)
2008-05-20 21:13
“劳拉”文件格式:所有使用“劳拉”文件格式的文件由512字节的数据块组成(你可以注意一下,所有的WORD、EXCEL、或者其他的Office文件大小都是512的倍数),数据块的序号从-1开始: 复合文档
序号为-1的块是整个文件的文件头块,存放了复合文件的一些整体信息,结构如下:
在512字节的数据块基础上,复合文件中包括了两种最基本的结构: 第一种是由512字节的大块连接起来的大块链,如果对以文件分配表(FAT)为基础的文件系统熟悉的话,可以很容易的理解大块链的概念,只要知道一个大块链的开始块的序号,通过大块映象图,就可以找到这一条大块链的所有内容。一个典型的大块映象图如下: 00200: fd ff ff ff 05 00 00 00 fe ff ff ff 04 00 00 00 00210: 06 00 00 00 fe ff ff ff 07 00 00 00 08 00 00 00 00220: 09 00 00 00 0a 00 00 00 0b 00 00 00 fe ff ff ff 00230: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 我们可以看到,如果一个大块链的开始块序号是0的话(该处的内容是5),那么这个大块链包括:序号为0的数据块、序号为5的数据块(该处的内容是7)、序号为7的数据块(该处的内容是9)、序号为9的数据块(该处的内容是0b)、序号为0b的数据块(该处的内容是-1,表示这是该链的最后一个数据块)。 对于比较小的结构,如果以512字节为单位的话会造成比较大的空间浪费,所以专门使用一个大块链来存放比较小的数据块,小于4096字节的数据结构使用小块链来表示,小块链的组成和寻址方法和大块链非常类似,唯一不同的是,小块链里面对小块的寻址不是在整个复合文件范围内的,而是在某一个特定的大块链范围内的,这个大块链的开始块序号在后面叙述。 目录链,目录链是复合文件最基本的数据链,描述了复合文件的目录结构信息。目录链的开始在头块中可以找到。目录链中包括了复合文件的目录信息,每一个目录项的大小是128字节,所以目录链的一个块可以包括4个目录项,第一个目录项是根目录项,名字叫做“根实体”(Root Entry),任何复合文件里面这都是第一个目录项。一个典型的根目录项如下: 00400: 52 00 6f 00 6f 00 74 00 20 00 45 00 6e 00 74 00 R o o t E n t 00410: 72 00 79 00 00 00 00 00 00 00 00 00 00 00 00 00 r y 00420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00440: 16 00 05 00 ff ff ff ff ff ff ff ff 03 00 00 00 00450: 00 09 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00460: 00 00 00 00 00 00 00 00 00 00 00 00 86 29 f6 1f 00470: ad 57 bb 01 03 00 00 00 00 0f 00 00 00 00 00 00 目录项结构的说明如下:
由于上面的数据结构不是来源于微软的官方文档,包括了很多猜测的成分,所以很多内容暂时无法断定其意义,有些结构的说明可能和微软的原意也不相符合,但是我们使用这个结构对微软的大量文档进行了分析,至今尚未发现有明显的错误存在。 在基本的“劳拉”文件结构的基础上,字处理文档、电子数据表文档具有不同的内部目录结构,下面是一个典型WORD文件的内部目录结构: 1.doc ——1Table:一些数据表 ——CompObj:通用的对象 ——ObjectPool:对象池,是一个目录,包括WORD文件中嵌入的图像、声音或者其他对象 ——WordDocument:实际的文字和格式化信息就存放在这里 ——SummaryInforamtion:摘要信息 ——DocumentSummaryInformation:其他的摘要信息 |
最近读者: