【我所認知的BIOS】—Decompression补充

news/2024/7/5 23:57:24 标签: 汇编, system, 算法, 框架, header, byte

【我所認知的BIOS—>Decompression补充

By LightSeed

2009-6-4

这篇文章主要是对上一篇文章Decompression的补充,上一篇文章一是考虑到篇幅,二是考虑到还没有谈到反汇编BIOS二进制文件,所以没有讲的很详细。在这篇文章中举个BIOS的例子来详细说明AWxxx  code在运行过程中解压缩的过程。(筆者:不管是解壓還是PCI的資源分配我們在掌握的時候都要首先掌握其框架,這個才是最重要的。在掌握了框架的基礎上再去跟code才會有事半功倍的效果。而且這樣也能夠讓你的知識更加體系化。)這補充的文章著重從解壓的結構上講,沒有講很細節的東西。

1BIOS中模块存在形式

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,这才是要真正解压缩数据要存放的地方。

(提醒一下:当我们在用cbromPCI option rom模块的时候,用cbrom /pcicbrom /4086是同样的效果,那么你能猜出其中的联系么?)

3BIOS中的模块都是一次解压缩的吗?

NO!要一次解压缩是不太可能的,哪儿有那么的空间来给我们用哦。就算是有,代码执行的效率也不高。因为每个模块的格式都是一样,那么每次需要那个模块我们就解哪个模块出来就可以了。而且都是放在了40000处,(system bios模块除外)程序再到这里取出来即可用。简单点说如下图:


http://www.niftyadmin.cn/n/959419.html

相关文章

Linux学习第二天:工欲善其事必先利其器

Linux学习第二天:工欲善其事必先利其器 ①首线是下载VMware12、RHEL,https://www.linuxprobe.com/tools ②安装VMware,一个虚拟机软件,可以模拟出一个新电脑硬件系统的软件,无脑下一步就可以(注意勾选“增强…

【我所認知的BIOS】—计算机中断系统(1)

【我所認知的BIOS】—>计算机中断系统(1) LightSeed 2009-6-8 中断有分为硬件中断和软件中断,顾名思义硬件中断是由计算机硬件产生的中断,类推软件中断是由计算机软件产生的中断。举个例子,当键盘有…

Microsoft Store应用安装路径和应用推荐——如何用Linux命令操控windows

本人是cnblog萌新,刚学编程不久的菜鸟,这是我的第一篇博客,请各位轻喷 Microsoft store安装路径: 相信很多人都跟我一样有强迫症,文件找不到安装目录就不舒服。一开始在系统盘找不到WindowsApps文件夹,后来…

为什么MySQL数据库要用B+树存储索引?

1. 具体到红黑树的话,这块应该怎么学呢? 二叉排序树你知道的吧? 这个我知道,就是左边比根节点小,右边比根节点大。 红黑树可以保证树的平衡性 为啥要设计成多路呢? 主要是为了进一步降低树的高度&#xff0…

iOS 隐藏显示tabBar

一般的界面显示需求:在主页面是显示 tabBar 的,在所有的子页面隐藏 tabBar,做法很简单 当push到一个新的页面时隐藏tabBar viewController.hidesBottomBarWhenPushed YES; 复制代码但是,需求是这样的: 主页是显示tabB…

SpringMVC框架01—使用IDEA搭建SpringMVC环境

1、Spring MVC 入门1.1、Spring MVC 简介把Web应用程序分为三层,分别是: 控制器(Controller):负责接收并处理请求,响应客户端;模型(Model):模型数据&#xff…

帮助前端--更好的调试接口之Fiddler

前言 有时候后台接口出现错误,但我们又不想配置Mock 或者 自定义json文件的时候当测试人员需要使用测试数据,而没有权限去更改数据的时候当想更加明确保证项目参数传输时候不会出现串改问题当想获取app或者手机端接口时候介绍Fiddler 1. fiddler 是以代理…

WinRAR安全漏洞问题严重!第一周有超过100种攻击

资安业者Check Point在今年2月20日揭露知名压缩软件WinRAR含有超过10年的重大漏洞,而趋势科技则说,在相关漏洞被公布的第一周,坊间就出现了超过100种不同的攻击行动,而且数量还在持续增加中。中国360威胁情报中心在2月25日即发现了…