真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

修復(fù)損壞的gz或tar.gz壓縮文件之方法篇-創(chuàng)新互聯(lián)

GZIP結(jié)構(gòu)圖:
修復(fù)損壞的gz或tar.gz壓縮文件之方法篇
修復(fù)一個(gè)損壞的gzip文件的關(guān)鍵環(huán)節(jié)在于找到下一個(gè)正常壓縮包的起始點(diǎn)。根據(jù)結(jié)構(gòu)圖中的信息可知,每個(gè)壓縮包的開始結(jié)構(gòu)中有是否到達(dá)尾部標(biāo)志、使用的哈夫曼樹類型、以及3個(gè)哈夫曼樹的樹元素個(gè)數(shù)等。如果某個(gè)gzip文件中間有一個(gè)壞扇區(qū),要找到壞扇區(qū)后的一個(gè)正常起點(diǎn),僅需按位右移,一直移位到可以正常解壓的某個(gè)位,就可能找到了正確的壓縮包起始。而根據(jù)gzip文件的壓縮作業(yè)窗口為32KB大小推算,這個(gè)遍歷不會(huì)超過64KB即可找到。在內(nèi)存中快速循環(huán)可以很快找到,但需要有明確的判斷錯(cuò)誤的方法。
首先可以明確的是結(jié)尾標(biāo)志,應(yīng)該為0(我們是從損壞的點(diǎn)向后查)。而哈夫曼樹類型也大致應(yīng)該是動(dòng)態(tài)哈夫曼(0x02),cl1的元素個(gè)數(shù)應(yīng)該取值為257到286之間(包含邊界),cl2的元素個(gè)數(shù)應(yīng)小于等于30,ccl的元素個(gè)數(shù)取值可為1-15(包含邊界)。
其實(shí),還可以參考的東西有,解開的哈夫曼樹是否異常,或者通過規(guī)律性原則找到最后一個(gè)取值為256的值,但這些算法應(yīng)該是較為麻煩的,有上面的算法連續(xù)校驗(yàn)幾個(gè)壓縮塊就足夠了。
具體方法是對(duì)gzip的源碼做修改,進(jìn)行遍歷。因時(shí)間關(guān)系,未做成通用工程,僅快速修改了部分代碼。大致的修改點(diǎn)為:
一、找到損壞點(diǎn):
在unzip.c中,
error("invalid compressed data--format violated");
這一行前,獲取當(dāng)前解碼字節(jié)位置即可。
?
二、遍歷找到損壞點(diǎn):
1、inflate.c文件中,改
if (nl > 286 || nd > 30)
#endif
return 1;
為:
if (nl > 286 || nd > 30||nl <257 || nd <1)
#endif
return 1;
2、inflate.c文件中,在int inflate_block(e)函數(shù)中
在如下代碼前
bb = b;
bk = k;
加入代碼:
if ((t != 2) || (e != 0))
return 2;
3、inflate.c文件中,在int inflate_block(e)函數(shù)尾部
把if (t == 0) 與if (t == 1)的情況都直接返回錯(cuò)誤值2
4、inflate.c文件中,函數(shù)int inflate()中,改
if ((r = inflate_block(&e)) != 0)?
return r;
end
為:
unsigned t; /
block type /
register ulg b; /
bit buffer /
register unsigned k; /
number of bits in bit buffer /
while (inptr <= insize)
{
unsigned int tptr = inptr;?
unsigned int tbk = bk;?
unsigned long tbb = bb;?
unsigned int twp = wp;?
long long tstart =
(long long*)(inbuf + tptr);
if ((r = inflate_block(&e)) != 0)
{
inptr = tptr;
bb = tbb;
bk = tbk;
wp = twp;
b = bb;
k = bk;
NEEDBITS(1)
DUMPBITS(1)
}
else
{
printf("get by www.datahf.net!"); //也可輸出tstart,bb,bk 值
}
}
此4步完成后,試著調(diào)試這個(gè)錯(cuò)誤的.gz文件,當(dāng)然,也可以在代碼中解釋完頭部結(jié)構(gòu)后加一個(gè)seek,直接seek到損壞位置。
通常情況下,輸出printf(“get by www.datahf.net!”)這行代碼時(shí),已經(jīng)找到了正確的起始位

岱岳網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站于2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前標(biāo)題:修復(fù)損壞的gz或tar.gz壓縮文件之方法篇-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://weahome.cn/article/desjgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部