Office文档基于复合文档格式
复合文档的组成
Header, Fat, Directory, Minifat, DIF, and Storage
一、Header 固定为512个字节,具体如下表:
二、FAT 记录每个sector的用处
sector类型有:free sectors (FREESECT = 0xFFFFFFFF), Fat Sectors (FATSECT = 0xFFFFFFFD) DIF Sectors (DIFSECT = 0xFFFFFFC)以及用于存储数据的sector
除Header以外每个sector对应FAT中一个四字节记录(通过SECT计算),从0x200开始的sector的SECT记为0,对应于FAT中第一个四字节组,如果这个四字节组中存储0xFFFFFFFF,表明该sector空闲,如果为0xFFFFFFFD,表明被FAT占用,如果为0xFFFFFFC表明被DIF占用,如果存储的是除此之外的正值则表明数据流接下来存储在该存储值对应的sector上,直到遇到0xFFFFFFFE表明该数据流结束。注意实际存储一般为Little-Endian。
三、DIF(Double-Indirect Fat)
DIF:DIF分为两部分,DIF第一部分存储在Header中从04CH开始的位置,记录了109个FAT“扇区”的SECT,当Excel文件大小超过7M时,才需要DIF第二部分,第二部分以链的形式存储在sector中,并且链的第一个sector的SECT记录在Header的_sectDifStart中,每个DIF占用sector的最后四个字节存储下一个DIF sector的SECT,最后一个DIF sector的最后四个字节为"fe ff ff ff",这四个字节前的4字节组以"ff ff ff ff"填充。下例_sectDifStart=0x0000569a addr=0x569a*0x200+0x200=0x00ad3600(SECT从0开始计数,0号SECT的起始地址为0x200,SECT为sect的实际地址计算为sector的大小×sect+512)
四、Directory记录复合文档内数据流的组织,类似文件系统,数据结构如下表