vmlinuz文件解压缩

先简单说明下 vmlinux 和 vmlinuz 的关系

vmlinux是一个包含linux kernel的静态链接的可执行文件,文件类型是linux接受的可执行文件格式之一(ELF、COFF或a.out)。

vmlinuz是可引导的,压缩的linux内核,“vm”代表的“virtual memory”。vmlinuz是vmlinux经过gzip和objcopy(*)制作出来的压缩文件。vmlinuz不仅是一个压缩文件,而且在文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。

拿到一个 vmlinuz 后解压缩的方法如下

[root@centos boot]# od -t x1 -A d vmlinuz | grep "1f 8b 08"
0013408 ff e0 1f 8b 08 00 ea 80 b9 52 02 03 ec 5b 7f 74
[root@centos boot]# dd if=vmlinuz bs=1 skip=0013410 | zcat > vmlinux
gzip: stdin: decompression OK, trailing garbage ignored
记录了9195934+0 的读入
记录了9195934+0 的写出
9195934字节(9.2 MB)已复制,51.5023 秒,179 kB/秒

这里特别解释一下 skip=0013410 这个数的计算方法,就是0013408这个数 + 0013408与1f 8b 08 00之间间隔的数字个数 = 得出的结果

示例中间隔了2个数字 ff e0,所以是 0013408+2=0013410

再举一个例子

[root@centos boot]# od -t x1 -A d vmlinuz-2.6.32-358.el6.x86_64 | grep "1f 8b 08"
0014432 48 8d 83 e0 3e 3d 00 ff e0 1f 8b 08 00 78 bc 26

根据输出可以得出 skip=0014432+9=001441=0014441


(END)

上一篇:学习python的第三天


下一篇:(转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)