【我所認知的BIOS】—>Decompression补充
2009-06-05 09:01
375 查看
【我所認知的BIOS】—>Decompression补充
By LightSeed2009-6-4
这篇文章主要是对上一篇文章Decompression的补充,上一篇文章一是考虑到篇幅,二是考虑到还没有谈到反汇编BIOS二进制文件,所以没有讲的很详细。在这篇文章中举个BIOS的例子来详细说明AWxxx code在运行过程中解压缩的过程。(筆者:不管是解壓還是PCI的資源分配我們在掌握的時候都要首先掌握其框架,這個才是最重要的。在掌握了框架的基礎上再去跟code才會有事半功倍的效果。而且這樣也能夠讓你的知識更加體系化。)這補充的文章著重從解壓的結構上講,沒有講很細節的東西。
1、BIOS中模块存在形式
在BIOS的二进制文件中我们可以用查看二进制文件的编辑器可以看到,各个模块存在的形式。上一章我们有详细讲LZH文件的格式,它们有固定的header和固定的模块结尾。(陌生的话建议先看看LZH压缩格式的说明见【我所認知的BIOS】—>Decompression)那么让我们来看看BIOS bin文件中的模块样子吧。如图1![](http://i48.tinypic.com/a0dr8m.jpg)
图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 |
(提醒一下:当我们在用cbrom压PCI option rom模块的时候,用cbrom /pci和cbrom /4086是同样的效果,那么你能猜出其中的联系么?)
3、BIOS中的模块都是一次解压缩的吗?
NO!要一次解压缩是不太可能的,哪儿有那么的空间来给我们用哦。就算是有,代码执行的效率也不高。因为每个模块的格式都是一样,那么每次需要那个模块我们就解哪个模块出来就可以了。而且都是放在了4000:0处,(system bios模块除外)程序再到这里取出来即可用。简单点说如下图:![](http://i46.tinypic.com/23mnfqd.jpg)
相关文章推荐
- 【我所認知的BIOS】—>Decompression
- 【我所認知的BIOS】—>PCI SCAN
- 【我所認知的BIOS】—>計算機中斷系統(3)
- 【我所認知的BIOS】—>SMbus
- 【我所認知的BIOS】—>SPD
- 【我所認知的BIOS】—>實模式&保護模式
- 【我所認知的BIOS】—>The Big Real Mode
- 【我所認知的BIOS】—>Clock generator
- 【我所認知的BIOS】—>虛擬存儲機制
- 【我所認知的BIOS】—>PCI SCAN
- 【我所認知的BIOS】—>Super IO
- 【我所認知的BIOS】->汇编语言之宏汇编1
- 【我所認知的BIOS】->汇编语言之宏汇编2
- 【我所認知的BIOS】—>计算机中断系统(1)
- 【我所認知的BIOS】—>實模式&保護模式切换实例
- 【我所認知的BIOS】—>SPD
- 【我所認知的BIOS】—>ADU.exe
- 【我所認知的BIOS】—>SMM
- 【我所認知的BIOS】—>PCI 的中斷(PIC下)
- 【我所認知的BIOS】—>PCI 配置空間拾趣-2