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

Welcome to ErranLi's Blog!

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

常用鏈接

留言簿(12)

搜索

  •  

積分與排名

  • 積分 - 178336
  • 排名 - 152

最新評(píng)論

閱讀排行榜


CHM格式解析


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

Feedback

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

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

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

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

# 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ù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美本精品男人aⅴ天堂| 欧美激情第三页| 日韩视频在线播放| 国产伊人精品| 欧美视频专区一二在线观看| 久久婷婷国产麻豆91天堂| 亚洲视频欧美在线| 亚洲精品1区2区| 麻豆精品一区二区综合av| 午夜精品亚洲| 亚洲网站在线看| 日韩午夜电影在线观看| 亚洲第一在线综合网站| 国内精品视频在线观看| 国产欧美日韩综合| 国产精品久久网站| 欧美视频一区二区三区…| 欧美国产先锋| 欧美成人国产一区二区| 久久综合电影| 久久视频国产精品免费视频在线| 欧美在线视频一区| 午夜在线a亚洲v天堂网2018| 亚洲在线观看视频网站| 一区二区三区国产在线观看| 99一区二区| 99re在线精品| 一区二区欧美在线| 一区二区三区日韩精品视频| 日韩亚洲在线观看| 99re热这里只有精品免费视频| 亚洲人久久久| 亚洲久久成人| 这里是久久伊人| 亚洲永久免费| 久久成人18免费网站| 久久久国产精品一区二区中文 | 欧美电影在线观看| 欧美激情精品久久久久久变态 | 91久久国产精品91久久性色| 欧美国产视频一区二区| 亚洲国产高清aⅴ视频| 亚洲国产成人精品久久| 亚洲国产日日夜夜| 日韩午夜av| 亚洲调教视频在线观看| 翔田千里一区二区| 久久国产精品一区二区| 狂野欧美激情性xxxx欧美| 欧美成人小视频| 欧美日韩一二区| 国产欧美日韩在线观看| 娇妻被交换粗又大又硬视频欧美| 亚洲国产精品va在线看黑人| 99精品久久免费看蜜臀剧情介绍| 宅男噜噜噜66国产日韩在线观看| 午夜久久资源| 玖玖国产精品视频| 亚洲欧洲一区二区三区在线观看| 一本一本久久a久久精品综合妖精| 亚洲在线播放电影| 久久久久久夜| 欧美日韩一区二区视频在线 | 国产精品久久午夜夜伦鲁鲁| 国产日韩亚洲欧美| 亚洲精品少妇30p| 午夜视频在线观看一区| 免费日韩成人| 夜夜狂射影院欧美极品| 欧美一区二区三区的| 欧美xart系列在线观看| 国产精品www色诱视频| 国语自产在线不卡| 日韩亚洲欧美一区| 久久精品在线观看| 亚洲人成网站色ww在线| 午夜精品亚洲一区二区三区嫩草| 欧美69wwwcom| 国产亚洲精品bt天堂精选| 亚洲人精品午夜| 欧美一区影院| 日韩午夜激情av| 久久久久在线观看| 国产精品美女久久久久av超清| 一区福利视频| 亚洲欧美自拍偷拍| 亚洲第一级黄色片| 欧美一区二区免费视频| 欧美日韩亚洲一区二区三区四区| 好吊色欧美一区二区三区四区| 一区二区三区国产在线观看| 美女亚洲精品| 香蕉久久精品日日躁夜夜躁| 欧美区在线播放| 伊人成人开心激情综合网| 亚洲综合首页| 最新国产拍偷乱拍精品 | 一区二区三区高清在线| 久久婷婷蜜乳一本欲蜜臀| 亚洲午夜极品| 欧美日韩国产在线观看| 亚洲成人在线免费| 久久精品一区二区三区四区| 国产精品99久久久久久久vr | 亚洲人成精品久久久久| 久久久久一区二区三区四区| 国产欧美欧美| 亚洲欧美日韩国产精品| 99国产精品私拍| 欧美日韩国产综合视频在线观看中文 | 99国产精品久久久久久久久久| 裸体女人亚洲精品一区| 狠狠色狠狠色综合系列| 久久九九免费视频| 新片速递亚洲合集欧美合集| 国产精品videossex久久发布| 9人人澡人人爽人人精品| 欧美激情一区二区三级高清视频| 久久久久一区二区| 激情成人综合网| 久久婷婷av| 久久久久99精品国产片| 国内精品免费在线观看| 久久久久国产成人精品亚洲午夜| 亚洲男人第一av网站| 国产毛片精品国产一区二区三区| 午夜欧美精品| 亚洲欧美日韩专区| 国产私拍一区| 猫咪成人在线观看| 免费看黄裸体一级大秀欧美| 最近中文字幕日韩精品| 亚洲第一主播视频| 欧美日本精品在线| 亚洲影视综合| 午夜一级在线看亚洲| 国产一区深夜福利| 久久综合中文色婷婷| 免费中文日韩| 一区二区三区欧美| 亚洲天堂成人在线观看| 国产九色精品成人porny| 久久久久久夜| 麻豆精品精华液| 亚洲日本中文字幕区| 亚洲精品一二三区| 国产精品美女黄网| 久久在线精品| 欧美精品久久天天躁| 亚洲图片在线| 性做久久久久久久久| 亚洲国产精品传媒在线观看| 亚洲人成人99网站| 国产精品一区二区三区久久| 久久嫩草精品久久久精品| 美女精品视频一区| 制服丝袜亚洲播放| 性久久久久久久久久久久| 亚洲国产精品一区制服丝袜| 亚洲精品乱码| 国产女精品视频网站免费| 免费在线看一区| 欧美日韩亚洲综合| 久久免费偷拍视频| 欧美日韩国产一级片| 久久狠狠亚洲综合| 欧美国产乱视频| 欧美在线观看视频在线| 欧美成人免费全部| 欧美一区二区啪啪| 欧美freesex8一10精品| 性久久久久久久久久久久| 另类春色校园亚洲| 午夜精品一区二区在线观看 | 久久黄金**| 9i看片成人免费高清| 久久不射网站| 一本久久a久久免费精品不卡| 性欧美在线看片a免费观看| 亚洲精品国产系列| 欧美一站二站| 亚洲自拍都市欧美小说| 久久这里有精品15一区二区三区| 亚洲欧美国产精品va在线观看| 久久伊人免费视频| 欧美一区二区三区另类| 欧美国产综合| 美女露胸一区二区三区| 国产精品毛片在线| 亚洲精品日韩在线| 怡红院精品视频| 午夜精品久久久久久久99水蜜桃| 99热在线精品观看| 久久综合一区二区| 久久精品动漫| 国产精品理论片在线观看| 亚洲精品欧美日韩| 亚洲黄一区二区| 久久久久久欧美| 久久激情五月婷婷|