【摘要】
CHM格式有一个初始化头,占38H字节,后面是header section和到正文 段的偏移量。加在一起,这些被称为文件头。
header section一共有两个section,一个是文件目录,另一个包含着文件长度和一些未知信息。
初始化头:
前四个字节为ITSF,第二个双字为版本信息,第三双字是文件头的总长度,第四双字值为1,第五双字是一个时间记录,(第一个字节是MSB,第二个字节是 fractional seconds(second byte),第三个字节可并不确定,第四个字节仅能知道其符号位是确定的。)第六双字是windows语言ID标识,后面16个字节是两个连续的组ID,分别为{7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC}
和{7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC}
后面是header section的表,其中有两项,每项占16个字节,记录着从文件头开始的偏移量和section的长度,各占8个字节。
【全文】
CHM格式有一个初始化头,占38H字节,后面是header section和到正文 段的偏移量。加在一起,这些被称为文件头。
header section一共有两个section,一个是文件目录,另一个包含着文件长度和一些未知信息。
初始化头:
前四个字节为ITSF,第二个双字为版本信息,第三双字是文件头的总长度,第四双字值为1,第五双字是一个时间记录,(第一个字节是MSB,第二个字节是 fractional seconds(second byte),第三个字节可并不确定,第四个字节仅能知道其符号位是确定的。)第六双字是windows语言ID标识,后面16个字节是两个连续的组ID,分别为{7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC}
和{7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC}
后面是header section的表,其中有两项,每项占16个字节,记录着从文件头开始的偏移量和section的长度,各占8个字节。
后面还有8个字节的信息,这些在版本2里是没有的。
header section 0:
第一双字:0x01fe
第三双字为文件大小
共占5个双字,其余双字均为0
header section 1(directory header)
开始的四个字节为ITSP,
后面的双字为版本号,
第三双字为本section长度,
第四双字信息未知,
第五双字值为0x1000,是目录块的大小,
第六双字是quickref section的“密度”,一般是2
第七双字是索引树的深度,1表示没有索引,2表示有一层的PMGI数据块。
第八双字表示根索引的块号,如果没有索引为-1
第九双字是第一个PMGL(listing)的块号
第十双字是最后一个PMGL的块号
第十一双字是-1
第十二双字是目录块的块数
第十三双字是windows语言ID标识
从这里开始有16个字节的GUID{5D02926A-212E-11D0-9DF9-00A0C922E6EC}
然后四个双字不知道是什么东西
本段共84个字节
从这里开始往后都是数据块,分为两种,一种是列表块(listing chunks),一种是索引块(index chunks)其中列表块的格式如下:
开始是四个字节PMGL
然后的四个字节是目录块尾部的空白区的长度或是quickref区域的长度
第三双字恒为0
第四双字是前一个列表块的块号,如果这是第一个块,该值为-1
第五双字是后一个列表块的块号,如果这是最后一块,该值为-1
从这里开始是目录列表项,按文件名排序,并且大小写不分
quickref区是从数据块的后面向前写,每隔n个项出现一个quickref,且n的值为1+(1<<“密度”),其格式从后至前为
第一个字:整个数据块中的项数
第二个字:从第0项到第n项之间的偏移量
第三个字:从第0项到第2n项之间的偏移量
以此类推
目录列表的每一项的格式如下:
encint型名字长度,后面是UTF-8编码的名称,encint型正文段,encint型偏移量,encint型长度,其中偏移量是从解压缩之后的正文段的开始来计算的,同样长度也是表示解压缩之后的长度。
在目录中存在两种文件,用户数据文件和格式信息文件,格式信息文件以两个连续的冒号“::”开头,用户数据文件以“/”开头。
索引块:
前四个字节为PMGI
后面四个字节是块尾部的quickref或是空白区的长度。
从这里开始是目录索引项的开始,每一个目录索引项的结构如下:
encint型的名称长度,UFT-8编码的名称,以此名称开始的列表块的块号。
quickref的格式和排列与列表块中相同
当有索引块的层次较多时,将不再存储数据块号而是存储下一层的索引号。
解释一下encint型变量的编码规则:
一种可变长度的整型变量,第一个字节只使用低7位,最高位为1表示该字节之后的下一字节的低7位要接在这7位的尾部组成一个数,这样通过移位相加的运算,直到遇到最高位为0的字节,可以组和成一个长度可调节的整数。
正文:在版本3中,正文一般紧跟着文件头,而且在文件头表之后有一个双字用来指定其位置。在版本2中,正文部分紧跟着文件头,而且所有此文件夹中的正文部分的第0段放在都放在这个益上,其它的正文段都within content section 0
名称列表文件:
放在content section 0中,文件名为"::DataSpace/NameList",其中包含着所有正文段的名称,其格式如下:
第一个字:以字计数的文件长度
第二个字:文件中的entry数
对于每一个entry格式为:
第一个字:以字计数的名字长度,不包括最后的NULL结尾符
以word 0表示所有entry的结束。
名称的编码类似于UFT-16。
段的名称目前为止只有两种,Uncompressed和MSCompressed,分别表示自解释文件和Microsoft LZX压缩算法压缩的文件。
section data:
对于段号不为0的段,还有一个文件为::DataSpace/Storage/<Section Name>/Content,里面存放着该段的压缩信息,所以,当解析非0段时,需要两步工作,第一步,取得第0段并将其解圧,取得段名,第二步才能利用段名找到相应的段
其余与格式相关的文件:
::DataSpace/Storage/<SectionName>/ControlData
共0x20个字节,存储关于压缩的信息
第一个双字为在“LZXC”串后的双字个数,在版本2中,此值必为6
第二个双字为“LZXC”
第三个双字为版本信息,必须大于2
第四个双字为LZX reset interval
第五个双字为窗口大小
第六个双字为缓存大小
第七个双字为0,未知信息。
::DataSpace/Storage/<SectionName>/SpanInfo
存放着未解压的段的长度信息。
::DataSpace/Storage/<SectionName>/Transform/List
存放GUID列表用于解压缩
压缩段:
这一段用LZX压缩,要进行解压缩,先要读取::DataSpace/Storage/<SectionName>/Transform/ {7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTable,其格式如下:
第一个双字为2,估计是版本信息
第二个双字是reset table中的entry数
第三个双字是8,每一个entry的大小
第四个双字是表头长度
16个字节的压缩前长度
16个字节的压缩后长度
16个字节的0x8000 block size for locations below
16个字节的0
16个字节的第一个非压缩数据块的边界在压缩数据块中的位置信息
注意:
There is one change from LZX as defined by Microsoft: After each LZX reset interval (defined in the ControlData file, but in practice equal to the window size) of compressed data is processed, the LZX state is fully reset, as if an entirely new file was being encoded. This allows semi-random access to the compressed data; you can start reading on any reset interval boundary using the reset interval size and the reset table.
分享到:
相关推荐
"chm格式分析_做CHM阅读器用的到"这个主题涉及到CHM格式的解析和CHM阅读器的开发,下面我们将深入探讨这个领域的关键知识点。 1. **CHM文件结构** - CHM文件基于HTMLHelp系统,内部包含索引、目录和HTML内容。 - ...
**chmlib-0.40:CHM格式解析工具详解** **一、CHM格式简介** CHM(Compiled Help Manual)是微软开发的一种电子文档格式,主要用于存储HTML帮助文件,常见于Windows操作系统中的各种软件帮助文档。它将HTML、图片和...
本篇毕业论文的主要目的是分析CHM文件格式的结构,并探讨如何在不同的设备上对CHM文件进行有效的解析和优化,特别是在移动设备上。 论文首先介绍了CHM文件的基本结构,即由CHM头、CHM头节和内容三部分组成。CHM头...
对于那些需要进一步处理或分析文本的用户,TXT格式提供了极大的便利,因为它可以被大多数文本编辑器和分析工具轻松打开。例如,你可以使用TXT文件进行关键词搜索、文本挖掘或自然语言处理任务。同时,TXT格式文件的...
总的来说,"chm格式转pdf格式"这一过程是通过特定的转换软件,如"abcchm",解析CHM文件的结构,再将解析出的内容重新组织并导出为PDF格式。这个过程涉及到HTML解析、PDF生成、图像处理等多个技术环节,目的是为了...
这个过程可能涉及到内容的解析、格式转换、索引生成等多个步骤,确保CHM文件在保持原始DOC文档内容完整性的同时,也能提供良好的阅读体验。 在产品帮助文档的制作中,使用CHM格式有其实际意义。一方面,软件开发商...
本话题将详细介绍如何使用Java网页文档转换为CHM格式的工具,以及这种转换过程中的关键知识点。 首先,我们需要理解Java网页文档通常是以HTML、CSS和JavaScript等Web技术编写的。这些文件可能包含一系列相互链接的...
2. `Hha.dll` 和 `Itcc.dll`:这些是支持CHM文件运行所必需的动态链接库文件,它们提供了CHM文件的解析和显示功能。 3. `QuickCHM.exe`:这可能是一款快速制作CHM文件的工具,用户可以通过该软件导入HTML文件、图片...
转换工具的主要功能是解析CHM文件中的HTML内容,并将其转换为纯文本格式。这个过程涉及以下几个关键步骤: 1. **解析CHM结构**:CHM文件是经过编译的,包含一个或多个HTML文件以及相关的图像、样式表等资源。转换...
CHM文件是一种常见的帮助文档格式,它包含了多个HTML页面、图像和其他资源,并使用了一种特殊的压缩方法存储。在Java中处理CHM文件,通常是为了在不支持或没有CHM查看器的环境下访问这些内容,或者为了将CHM内容集成...
Java CHM解析主要涉及到的是如何在Java环境中处理和解析Windows平台下的 Compiled Help Module (CHM) 文件。CHM文件是微软提供的一种用于存储帮助文档的格式,它将多个HTML文件、图片和其他资源压缩在一个单一的文件...
这个压缩包中的“chm格式转成txt格式工具”应该就是这样一个实用程序,它可以解析CHM文件并将其内容导出为TXT格式。以下是转换过程可能涉及的一些关键步骤和技术: 1. **解析CHM结构**:CHM文件的内部结构类似于...
GDAL(Geospatial Data Abstraction Library)是一个开源的库,...使用CHM格式的文档,用户可以利用内置的搜索功能快速找到所需的信息,提高了工作效率。对于需要处理地理空间数据的人来说,这份文档是宝贵的参考资料。
"网页存为CHM格式"是指将一个或多个网页转换成CHM文件,以便离线查看或者方便分享。 **CHM格式的优势** 1. **压缩性强**:CHM文件通过HTML Help Compiler将大量网页内容压缩到一起,大大减小了文件体积,节省存储...
Java解析CHM(Compiled Help Manual)文件是一种技术,主要用于处理微软Windows系统中常见的帮助文档格式。CHM文件是由HTML页面和其他资源压缩而成的,通常包含索引、目录和搜索功能。`chm4j`是一个Java库,专门设计...
标题"倍福全套文档与编程资料(chm格式).zip"表明这是一份关于倍福(Beckhoff)公司的自动化技术文档和编程资料,且以CHM(Microsoft Compiled HTML Help)格式存储在压缩包内。CHM是一种常见的电子书格式,它将HTML...
**chm2word格式转换工具**是一款专门用于将CHM(Microsoft Compiled HTML Help)格式的文档转换为其他多种格式的工具。CHM格式是微软推出的一种帮助文档格式,通常用于软件的帮助手册,它将HTML页面、图像和其他资源...
它通过解析注释来创建HTML格式的文档,使得开发者能够轻松地了解类、接口、方法和其他编程元素的用法。然而,有时我们可能需要将这些JavaDoc文档转换为CHM(Microsoft编译的帮助文件)格式,因为CHM文件具有更小的...
- **文本解析与渲染**:对于TXT到PDF或CHM的转换,工具需要解析文本内容,根据原文本的格式信息(如段落、标题、字体等)生成相应的PDF或CHM结构。 - **PDF解析与重建**:如果要将PDF转为TXT或CHM,转换器需要解析...
CHM(Compiled HTML Help)格式文件是微软推出的一种电子文档格式,主要用于存放和查看帮助文档。它将HTML页面、图像和其他资源压缩在一个单一的、可执行的文件中,便于分发和快速访问。本官方帮助文档详细介绍了...