青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Welcome to ErranLi's Blog!

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

常用鏈接

留言簿(12)

搜索

  •  

積分與排名

  • 積分 - 178126
  • 排名 - 152

最新評論

閱讀排行榜


CHM格式解析


CHM格式有一個(gè)初始化頭,占38H字節(jié),后面是header section和到正文 段的偏移量。加在一起,這些被稱為文件頭。
header section一共有兩個(gè)section,一個(gè)是文件目錄,另一個(gè)包含著文件長度和一些未知信息。
初始化頭:
前 四個(gè)字節(jié)為ITSF,第二個(gè)雙字為版本信息,第三雙字是文件頭的總長度,第四雙字值為1,第五雙字是一個(gè)時(shí)間記錄,(第一個(gè)字節(jié)是MSB,第二個(gè)字節(jié)是 fractional seconds(second byte),第三個(gè)字節(jié)可并不確定,第四個(gè)字節(jié)僅能知道其符號位是確定的。)第六雙字是windows語言ID標(biāo)識,后面16個(gè)字節(jié)是兩個(gè)連續(xù)的組ID, 分別為{7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC}
和{7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC}
后面是header section的表,其中有兩項(xiàng),每項(xiàng)占16個(gè)字節(jié),記錄著從文件頭開始的偏移量和section的長度,各占8個(gè)字節(jié)。
后面還有8個(gè)字節(jié)的信息,這些在版本2里是沒有的。
header section 0:
第一雙字:0x01fe
第三雙字為文件大小
共占5個(gè)雙字,其余雙字均為0
header section 1(directory header)
開始的四個(gè)字節(jié)為ITSP,
后面的雙字為版本號,
第三雙字為本section長度,
第四雙字信息未知,
第五雙字值為0x1000,是目錄塊的大小,
第六雙字是quickref section的“密度”,一般是2
第七雙字是索引樹的深度,1表示沒有索引,2表示有一層的PMGI數(shù)據(jù)塊。
第八雙字表示根索引的塊號,如果沒有索引為-1
第九雙字是第一個(gè)PMGL(listing)的塊號
第十雙字是最后一個(gè)PMGL的塊號
第十一雙字是-1
第十二雙字是目錄塊的塊數(shù)
第十三雙字是windows語言ID標(biāo)識
從這里開始有16個(gè)字節(jié)的GUID{5D02926A-212E-11D0-9DF9-00A0C922E6EC}
然后四個(gè)雙字不知道是什么東西
本段共84個(gè)字節(jié)
從這里開始往后都是數(shù)據(jù)塊,分為兩種,一種是列表塊(listing chunks),一種是索引塊(index chunks)其中列表塊的格式如下:
開始是四個(gè)字節(jié)PMGL
然后的四個(gè)字節(jié)是目錄塊尾部的空白區(qū)的長度或是quickref區(qū)域的長度
第三雙字恒為0
第四雙字是前一個(gè)列表塊的塊號,如果這是第一個(gè)塊,該值為-1
第五雙字是后一個(gè)列表塊的塊號,如果這是最后一塊,該值為-1
從這里開始是目錄列表項(xiàng),按文件名排序,并且大小寫不分
quickref區(qū)是從數(shù)據(jù)塊的后面向前寫,每隔n個(gè)項(xiàng)出現(xiàn)一個(gè)quickref,且n的值為1+(1<<“密度”),其格式從后至前為
第一個(gè)字:整個(gè)數(shù)據(jù)塊中的項(xiàng)數(shù)
第二個(gè)字:從第0項(xiàng)到第n項(xiàng)之間的偏移量
第三個(gè)字:從第0項(xiàng)到第2n項(xiàng)之間的偏移量
以此類推
目錄列表的每一項(xiàng)的格式如下:
encint型名字長度,后面是UTF-8編碼的名稱,encint型正文段,encint型偏移量,encint型長度,其中偏移量是從解壓縮之后的正文段的開始來計(jì)算的,同樣長度也是表示解壓縮之后的長度。
在目錄中存在兩種文件,用戶數(shù)據(jù)文件和格式信息文件,格式信息文件以兩個(gè)連續(xù)的冒號“::”開頭,用戶數(shù)據(jù)文件以“/”開頭。
索引塊:
前四個(gè)字節(jié)為PMGI
后面四個(gè)字節(jié)是塊尾部的quickref或是空白區(qū)的長度。
從這里開始是目錄索引項(xiàng)的開始,每一個(gè)目錄索引項(xiàng)的結(jié)構(gòu)如下:
encint型的名稱長度,UFT-8編碼的名稱,以此名稱開始的列表塊的塊號。
quickref的格式和排列與列表塊中相同
當(dāng)有索引塊的層次較多時(shí),將不再存儲數(shù)據(jù)塊號而是存儲下一層的索引號。
解釋一下encint型變量的編碼規(guī)則:
一種可變長度的整型變量,第一個(gè)字節(jié)只使用低7位,最高位為1表示該字節(jié)之后的下一字節(jié)的低7位要接在這7位的尾部組成一個(gè)數(shù),這樣通過移位相加的運(yùn)算,直到遇到最高位為0的字節(jié),可以組和成一個(gè)長度可調(diào)節(jié)的整數(shù)。
正文:在版本3中,正文一般緊跟著文件頭,而且在文件頭表之后有一個(gè)雙字用來指定其位置。在版本2中,正文部分緊跟著文件頭,而且所有此文件夾中的正文部分的第0段放在都放在這個(gè)益上,其它的正文段都within content section 0
名稱列表文件:
放在content section 0中,文件名為"::DataSpace/NameList",其中包含著所有正文段的名稱,其格式如下:
第一個(gè)字:以字計(jì)數(shù)的文件長度
第二個(gè)字:文件中的entry數(shù)
對于每一個(gè)entry格式為:
第一個(gè)字:以字計(jì)數(shù)的名字長度,不包括最后的NULL結(jié)尾符
以word 0表示所有entry的結(jié)束。
名稱的編碼類似于UFT-16。
段的名稱目前為止只有兩種,Uncompressed和MSCompressed,分別表示自解釋文件和Microsoft LZX壓縮算法壓縮的文件。
section data:
對 于段號不為0的段,還有一個(gè)文件為::DataSpace/Storage/<Section Name>/Content,里面存放著該段的壓縮信息,所以,當(dāng)解析非0段時(shí),需要兩步工作,第一步,取得第0段并將其解圧,取得段名,第二步才 能利用段名找到相應(yīng)的段
其余與格式相關(guān)的文件:
::DataSpace/Storage/<SectionName>/ControlData
共0x20個(gè)字節(jié),存儲關(guān)于壓縮的信息
第一個(gè)雙字為在“LZXC”串后的雙字個(gè)數(shù),在版本2中,此值必為6
第二個(gè)雙字為“LZXC”
第三個(gè)雙字為版本信息,必須大于2
第四個(gè)雙字為LZX reset interval
第五個(gè)雙字為窗口大小
第六個(gè)雙字為緩存大小
第七個(gè)雙字為0,未知信息。
::DataSpace/Storage/<SectionName>/SpanInfo
存放著未解壓的段的長度信息。
::DataSpace/Storage/<SectionName>/Transform/List
存放GUID列表用于解壓縮
壓縮段:
這 一段用LZX壓縮,要進(jìn)行解壓縮,先要讀取::DataSpace/Storage/<SectionName>/Transform/ {7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTable,其格式如下:
第一個(gè)雙字為2,估計(jì)是版本信息
第二個(gè)雙字是reset table中的entry數(shù)
第三個(gè)雙字是8,每一個(gè)entry的大小
第四個(gè)雙字是表頭長度
16個(gè)字節(jié)的壓縮前長度
16個(gè)字節(jié)的壓縮后長度
16個(gè)字節(jié)的0x8000 block size for locations below
16個(gè)字節(jié)的0
16個(gè)字節(jié)的第一個(gè)非壓縮數(shù)據(jù)塊的邊界在壓縮數(shù)據(jù)塊中的位置信息
注意:
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.
posted on 2007-10-14 00:07 erran 閱讀(2254) 評論(5)  編輯 收藏 引用 所屬分類: Standard & Confer

Feedback

# re: CHM格式解析 2007-10-30 21:37 牛牛
說得夠細(xì),能不能給出VB讀取的(從中讀取想要的文件)代碼,小弟學(xué)VB加網(wǎng)頁設(shè)計(jì),哪位老大給個(gè)代碼,在此謝過!偶的郵箱:liyong_sbcel@sina.com  回復(fù)  更多評論
  

# re: CHM格式解析 2007-10-30 22:25 Minidx全文檢索
這個(gè)不錯(cuò),收藏了  回復(fù)  更多評論
  

# re: CHM格式解析 2007-11-01 16:52 地方深度
謝謝  回復(fù)  更多評論
  

# re: CHM格式解析 2008-04-15 13:37 spiet
講了半天,我還是不知道正文內(nèi)容從哪里開始的.另外如何解壓正文  回復(fù)  更多評論
  

# re: CHM格式解析 2008-12-04 18:13 reeze
可以參考這網(wǎng)站,里面有詳細(xì)的介紹。
http://www.russotto.net/chm/index.html
還有這個(gè)非官方介紹
http://savannah.nongnu.org/projects/chmspec  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            黑人巨大精品欧美一区二区| 一区二区三区**美女毛片| 亚洲精品视频在线看| 黑丝一区二区| 韩日欧美一区二区| 在线观看精品| 亚洲精品一二| 中文一区字幕| 久久精品综合网| 免费观看亚洲视频大全| 亚洲国产成人av在线 | 亚洲一区二区三区乱码aⅴ| 中文国产亚洲喷潮| 久久精品夜夜夜夜久久| 美日韩精品视频| 亚洲区欧美区| 午夜综合激情| 欧美区日韩区| 国内精品美女在线观看| 亚洲精选久久| 久久精品99国产精品日本| 欧美大片免费久久精品三p| 夜夜爽av福利精品导航| 久久久夜精品| 国产精品人人做人人爽人人添| 国产亚洲精品高潮| 一区二区久久久久| 欧美成人在线免费视频| 亚洲欧美国产一区二区三区| 欧美xx69| 在线成人av.com| 欧美专区第一页| 日韩一区二区久久| 午夜在线视频一区二区区别| 午夜日韩在线观看| 欧美久久综合| 激情亚洲成人| 欧美一级淫片aaaaaaa视频| 欧美激情麻豆| 久久国产精品高清| 国产精品丝袜白浆摸在线| 亚洲精品免费一区二区三区| 欧美综合激情网| 一区二区高清视频在线观看| 欧美大片va欧美在线播放| 在线观看国产成人av片| 久久成人av少妇免费| 亚洲午夜黄色| 国产精品国内视频| 日韩亚洲一区在线播放| 亚洲国产美女久久久久| 麻豆freexxxx性91精品| 在线播放一区| 久久婷婷激情| 久久久久国产精品麻豆ai换脸| 国产欧美日本| 久久精品国产第一区二区三区| 日韩亚洲成人av在线| 欧美激情亚洲另类| 99国内精品久久| 亚洲国产精品视频一区| 欧美高清一区二区| 亚洲精品一区二区在线| 亚洲国产精品久久精品怡红院| 免费在线观看一区二区| 亚洲精品日产精品乱码不卡| 亚洲国产视频直播| 欧美日韩视频在线一区二区观看视频 | 欧美亚洲尤物久久| 国产午夜精品久久久久久免费视 | 亚洲人成在线观看网站高清| 欧美国产视频在线| 亚洲巨乳在线| 日韩一级成人av| 国产美女精品视频免费观看| 久久久www| 蜜桃av一区二区三区| 一区二区三区日韩欧美| 亚洲一区精品视频| 国产午夜精品理论片a级大结局 | 欧美大学生性色视频| 91久久精品久久国产性色也91| 欧美二区乱c少妇| 欧美日韩精品一区二区天天拍小说| 亚洲四色影视在线观看| 亚洲网站在线播放| 在线播放中文字幕一区| 日韩一级黄色片| 国产亚洲毛片| 亚洲黄色精品| 国产亚洲福利| 亚洲区一区二区三区| 国产亚洲欧洲997久久综合| 亚洲国产综合在线看不卡| 国产伦精品一区二区三区高清| 免费h精品视频在线播放| 欧美日韩中文字幕在线| 久久影院亚洲| 国产精品日韩精品| 亚洲国产天堂久久综合| 国产精品一区久久| 欧美激情精品久久久| 国产日韩欧美一区二区三区在线观看| 牛牛精品成人免费视频| 国产精品一区一区三区| 亚洲精品四区| 亚洲黄色影院| 久久久精品欧美丰满| 亚洲一区免费| 欧美精品成人一区二区在线观看| 久久久久在线| 欧美色中文字幕| 亚洲国产成人精品视频 | 一区二区三区日韩欧美精品| 久久久久高清| 久久精品国产v日韩v亚洲| 欧美人与性动交α欧美精品济南到| 久久精品噜噜噜成人av农村| 欧美性大战久久久久久久蜜臀| 亚洲国产高清在线| 一区视频在线看| 小黄鸭视频精品导航| 亚洲欧美日韩精品久久| 欧美日韩高清一区| 亚洲精品国产精品乱码不99| 91久久视频| 欧美国产日韩a欧美在线观看| 女人天堂亚洲aⅴ在线观看| 国内综合精品午夜久久资源| 午夜精品久久久久久久99樱桃| 亚洲在线中文字幕| 欧美午夜国产| 一本色道久久综合狠狠躁的推荐| 日韩一区二区精品葵司在线| 另类专区欧美制服同性| 男女精品视频| 亚洲激情网站免费观看| 免费欧美视频| 亚洲精品日韩欧美| 一区二区三区四区五区在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲综合精品自拍| 性久久久久久久久久久久| 国产精品色婷婷| 午夜精品久久久久久久久久久久 | 一本色道久久综合| 欧美日韩亚洲一区二区三区在线 | 日韩小视频在线观看专区| 亚洲午夜激情在线| 国产精品久久久久久亚洲调教| 亚洲免费网站| 另类尿喷潮videofree | 久久色中文字幕| 亚洲黄色成人| 欧美日一区二区在线观看| 一本久道久久综合婷婷鲸鱼| 亚洲欧美在线网| 伊人久久大香线蕉av超碰演员| 免费久久精品视频| 国产精品99久久久久久www| 久久久91精品| 亚洲精品国产精品国自产在线 | 亚洲午夜日本在线观看| 久久久久久精| 99热精品在线| 国产精品推荐精品| 久久亚洲视频| 一区二区三区四区五区在线| 久久久久久网站| 一区二区三区国产在线观看| 国产亚洲综合精品| 欧美日韩国语| 久久久久看片| 亚洲一区二区三区777| 免费欧美在线| 欧美有码在线观看视频| 亚洲欧洲一区二区在线播放| 欧美亚州一区二区三区| 久久久最新网址| 亚洲午夜精品久久久久久app| 麻豆成人综合网| 香蕉亚洲视频| 一区二区三区国产精华| 悠悠资源网久久精品| 国产精品视频午夜| 欧美噜噜久久久xxx| 久久三级视频| 欧美一级专区| 宅男66日本亚洲欧美视频| 欧美激情偷拍| 久久综合伊人77777麻豆| 亚洲欧美日韩一区| 一区二区三区视频观看| 亚洲精品一区二区三区不| 伊人成人在线| 激情小说亚洲一区| 在线看成人片| 国产在线精品二区| 国产精品素人视频| 国产精品久久97|