【我所認知的BIOS】—>Decompression补充
By LightSeed
2009-6-4
这篇文章主要是对上一篇文章Decompression的补充,上一篇文章一是考虑到篇幅,二是考虑到还没有谈到反汇编BIOS二进制文件,所以没有讲的很详细。在这篇文章中举个BIOS的例子来详细说明AWxxx code在运行过程中解压缩的过程。(筆者:不管是解壓還是PCI的資源分配我們在掌握的時候都要首先掌握其框架,這個才是最重要的。在掌握了框架的基礎上再去跟code才會有事半功倍的效果。而且這樣也能夠讓你的知識更加體系化。)這補充的文章著重從解壓的結構上講,沒有講很細節的東西。
1、BIOS中模块存在形式
在BIOS的二进制文件中我们可以用查看二进制文件的编辑器可以看到,各个模块存在的形式。上一章我们有详细讲LZH文件的格式,它们有固定的header和固定的模块结尾。(陌生的话建议先看看LZH压缩格式的说明见【我所認知的BIOS】—>Decompression)那么让我们来看看BIOS bin文件中的模块样子吧。如图1
图1 BIOS bin中模块的存在形式
从图1中我们可以清楚地看到各个模块在BIOS bin文件中都是以LZH格式存在的。
我们知道了BIOS bin文件中的模块是被LHA压缩的,那么在解压缩的时候也就知道怎么解压缩了,算法我到是没有研究过。现在我们最关注的不是怎么解压缩(因为那些都是有成熟的算法去做的),而是解压缩后模块的数据是放到了内存中的哪里?
2、解压缩后存放在哪里?
详细参看一下图1中画红线的地方,他们的offset对应的是LZH格式中的11H~12H。这个word是解压出来的数据将要被存放的segment。(当然图1中我截取了三个模块,其他的所有模块都是这样的。)
那么我们提取出来看看,见表2.1
表2.1
模块名字
|
Segment
|
a.bin(system BIOS)
|
5000
|
Awardext.rom
|
407F
|
ACPITBL.BIN
|
4003
|
其他模块也是一样。上表是我们读出来的数据,可能大家都会问为什么不是4000H呢?这个我以后在讲反汇编的时候再给大家解释,它是有其他作用的。Kernel在解压的过程中会先把40XX中的低byte清零,这个时候407F,4003等等都成了4000H,这才是要真正解压缩数据要存放的地方。
(提醒一下:当我们在用cbrom压PCI option rom模块的时候,用cbrom /pci和cbrom /4086是同样的效果,那么你能猜出其中的联系么?)
3、BIOS中的模块都是一次解压缩的吗?
NO!要一次解压缩是不太可能的,哪儿有那么的空间来给我们用哦。就算是有,代码执行的效率也不高。因为每个模块的格式都是一样,那么每次需要那个模块我们就解哪个模块出来就可以了。而且都是放在了4000:0处,(system bios模块除外)程序再到这里取出来即可用。简单点说如下图:
分享到:
相关推荐
下附软件文档部分说明:<br>Overview:<br> Functions provided by the library<br> Outline of typical usage<br>Basic library usage:<br> Data formats<br> Compression details<br> Decompression details<br> ...
不同于lee模型的,udf源代码,似乎比lee模型可以更精确
program for image decompression
rle compression decompression
block dimention for image compression and decompression matlab source code
Initialization of a JPEG decompression object Source Code for Linux.
LZW compression and decompression
LZOAccel-D是一个无损数据解压缩引擎的FPGA硬件实现,兼容LZO 2.10标准。 Core接收压缩的输入数据块,产生解压缩后的数据块。Core分析数据块的头和尾,检查输入数据块的错误,并且输出解压缩后的数据载荷,所以用户...
用U盘装系统出现_decompression_error_abort_是什么意思
minilzo utils - allowing compression & decompression
RLE compression and decompression utility
compression and decompression
D8SQLDOC learning and case without decompression password
LPC voice compression and decompression example
几个关于压缩与解压的源码与大家分享,一起学习一起成长
lzw compression et decompression
This file implements multi-threaded decompression in the decompressor framework.
安卓Android源码——Decompression.zip
视频压缩与解压缩,RGB2YUV的算法原理,视频压缩和解压缩以及视频显示的用法。采用H.264实现视频的格式转换、压缩、解压缩、以及显示。