您的位置:首页 > 移动开发 > Android开发

Android培训班(99)内核解压过程12

2012-04-14 21:38 441 查看
在函数decompress_kernel里看到调用gunzip函数来解压内核代码,你也许比较好奇,这个gunzip函数里究竟是怎么样把内核代码解压出来的呢?为了深入地理解解压的代码,就得学习gzip文件格式,压缩的原理,才会理解其中的奥秘。现在就先看看gzip的文件格式,如下:

2bytes GZIP标志字节:0x1f,0x8b (\037 \213)

1byte 压缩方法:(0..7 reserved, 8 =deflate)

1byte 标志位:

bit 0 set: 文件可能是ASCII文本文件

bit 1 set: 附加多个gzip文件部分

bit 2 set: 存在有可选的附加内容

bit 3 set: 提供了原始的文件名称

bit 4 set: 则提供有一个O-终结的文件内容

bit 5 set: 文件被加密

bit 6,7: 保留

4bytes 文件更改时间(Unix时间)

1byte 额外的标志,决定了压缩方法。2:使用最大的压缩,最慢的算法

4:采用最快的算法

1byte 这个标志指明了进行压缩时系统的类型。

0 - FAT filesystem(MS-DOS, OS/2, NT/Win32)

1 - Amiga

2 - VMS (or OpenVMS)

3 - Unix

4 - VM/CMS

5 - Atari TOS

6 - HPFS filesystem(OS/2, NT)

7 - Macintosh

8 - Z-System

9 - CP/M

10 - TOPS-20

11 - NTFS filesystem(NT)

12 - QDOS

13 - Acorn RISCOS

255 - unknown

2bytes optional part number (second part=1) 可选的序号

2bytes optional extra field length 可选的附加内容的长度

?bytes optional extra field 可选的附加内容

?bytes optional original file name, zero terminated

可选的原始文件名称,以'\0'结束

?bytes optional file comment, zero terminated

可选文件内容(这部分不被解释,而是可读的供人使用的,以'\0'结束

12bytes optional encryption header

?bytes compressed data

4bytes crc32 这个是未压缩数据的循环冗余校验值。

4bytes uncompressed input size modulo 2^32 这是原始数据的长度以2的32次方为模的值。

有了文件的格式,就可以按图索骥,也就是根据文件的格式来分析压缩数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: