【我所认知的BIOS】->反汇编BIOS之准备工作
LightSeed
3/11/2010
上海
在我们进入反汇编的旅途之前,我想我应该把一些大家应该准备的东西都列一下,只有有了这样的针对性准备嘛,我想我写的文章才更能引起大家的共鸣。我用的主板是915GS+ICH6+Winbond83627HF的主板。Bios也就是用awardflash.exe读出来的bin文件。
1、PCI bus的简单理解与操作
关于PCI的操作,在
http://blog.csdn.net/lightseed/archive/2009/05/27/4219244.aspx
这个章节中有对PCI bus操作的示例。至于PCI bus的总线操作嘛,我想目前我们还可以不用了解地那么深入。
2、北桥关于CPU地址的decode
为什么要专门加上这个呢?因为在之前的文章中,有人提问问到过一个问题,说当板子刚刚上电的时候,CPU不是说从FFFF_FFF0H处去读指令么?怎么又和BIOS的F000段扯上关系了哦?这个问题可以用一种比较好理解的通俗的方法来看。把北桥看做一个开关,在上电的时候它会忽略FFFF_FFF0H这个地址中的高12个bit。就是FFFE_0000H-FFFF_FFFFH其实对应的就是000E_0000H-000F_FFFFH这面的地址访问。这样理解虽然不太正确,但是比较容易懂。
3、一些关于Legacy IO的了解
比如说一些比较古老的IO port在后续的BIOS中会比较多的操作,他们应该大多都能够在ICH6的datasheet里面找到。比如说,70H,71H,61H,92H,CF9H等等。如果您不知道的话,到是可以google一下。或者留言也行,(原本以为这里比较简单,所以就没列出来。)
【70H】的详细说明在ICH6中的10.7.2 NMI_EN—NMI Enable (and Real Time Clock Index)
【61H】的详细说明在ICH6中的10.7.1 NMI_SC—NMI Status and Control Register
【92H】的详细说明在ICH6中的10.7.3 PORT92—Fast A20 and Init Register
上面只是列了一个简单的列表,详细地您自己去看。
4、反汇编的过程中会用到的工具
IDA Freeware Version 4.3它是用来反汇编的利器,功能相当强大,它也是我们反汇编过程中用的最多的工具。
CBROM.EXE任何一个版本都可以,是用来查看AWARD bios的模块结构的。
MODBIN6.EXE还是比较高的比较好。主要是用来解压缩systembios这个模块的。(当然用AwardEditor也可以做到。)
Ultraedit.EXE能够查看二进制文件就OK了。因为在BIOS的执行过程中,有时候会查看一些特殊的标志符号(ASCII的),这样就可以很方便地找到偏移,方便进一步反汇编。
5、反汇编的过程中会看的资料
当然一个平台的信息很重要了,那么在BIOS run的过程中,显然配置的信息需要不时地查看各个寄存器的只以及其对应的function。915的chipset的datasheet可以从intel的官网上下到。地址如下:
http://www.intel.com/Assets/PDF/datasheet/305264.pdf
ICH6
http://www.intel.com/assets/pdf/datasheet/301473.pdf
当然这些都是datasheet,还有一些资料也应该是必须的,intel programming guide。
http://www.intel.com/products/processor/manuals/
6、反汇编的第一步应该是什么?
在
http://blog.csdn.net/lightseed/archive/2009/10/27/4735101.aspx
这个章节中,和大家详细探讨了CPU第一条指令的地址,BIOS其实也就是从FFFF_FFF0H这个地方去取指令的。(当然BIOS并不是完全的纯二进制代码,有一部分是压缩过的。其中没有压缩过的就是现在说的bootblock这部分了。这部分代码可以直接执行。而压缩过的bios会在bootblock跑完了以后被全部解压缩出来,继续跑。解压的过程在
http://blog.csdn.net/lightseed/archive/2009/06/03/4239127.aspx
有比较多的论述,当时我只是和大家从算法和架构上与大家进行了探讨,之后我会在BIOS代码中让大家看看加压缩的真实面目。)
7、一个不得不提醒的事
BIOS的运行,正如上面说的一样,主要分成了三个阶段。
第一个阶段是bootblock阶段,这个阶段比较特殊,因为memory还不使用。所以很特殊,在调用函数的时候就不能用平常的call来做了。会用到一个叫做ROM_CALL的宏来做。
第二个阶段和第三个阶段合起来叫做POST(Power-On Self Test)的阶段。其实就是bootblock阶段后的一个阶段都叫做POST。
从BIOS的角度讲,POST又被分为了第二阶段E0POST和第三阶段E8POST。(这个比较专业了哈,只是给大家了解一下,业内人士飘过就是。)
主要在bootblock的时候ROM_CALL的这个宏要专门提出来:
ROM_CALL MACRO RTN_NAME
LOCAL RTN_ADD
mov sp,offset DGROUP:RTN_ADD
jmp RTN_NAME
RTN_ADD: dw DGROUP:$+2
ENDM
这个宏主要还是利用了retn的具体操作来设计的。我说一下,宏把sp指向了JMP指令前面的地址(RTN_ADD),而这个地址(RTN_ADD)里面存的offset恰好又是RTN_ADD+2。那么在执行retn的时候,就会把ss:sp指向的这个word赋值给IP,这样就完成了一个retn的动作,继续回到之前的程序流程中去。在反汇编的时候,这个要务必记清楚。
8、IDA pro的用法介绍
;--------------------------------------以下这部分主要参考了《Pinczakko's Guide to Award BIOS Reverse Engineering》中的相关章节,大致是他的翻译版,本人觉得他写的挺好了的,所以就直接引用了。在这里特别注明一下。这位前辈的文章可是相当的精髓哦,也很深入值得向大家推荐。(其实他也就和我一般大,真的应该好好向他学习。)
在装好IDA PRO Freeware 4.3后双击运行如图1
图1
点击OK即可,下一个步骤图如图2
图2
当你是第一次反汇编的时候,那么你就选中NEW,当你的电脑上已经有project文件的话,那么就可以直接选择相应的文件,点‘previous’即可。或者你也想自己加载bin文件也可以,点‘GO’即可。
会出现图3的界面
图3
加载bin文件后,会出现如下的界面图4
图4
在这个对话框中,选择P4即可,(在我的板子上是用P4的CPU,我想应该选其他也没有关系,您可以试试。)只需要改这里,其他的都默认,然后‘OK’
然后会马上弹出个对话框如图5
图5
由于一开始BIOS是运行在16bit上的real mode下的。(在programming guide里面有详细描述。也可以看看前面的第一条指令那篇文章,都有详细描述。)所以点 ‘No’即可。
然后会出现图6的对话框。
图6
然后就是真正的反汇编的对话框了。如图7
图7
在图7中,有三个红色的框框,从上到下,第一个是指机器码的地址,第二是只二进制反汇编的结果,第三个是说消息窗口就在下面了。
;-----------------------------------------
有了以上一些初步的知识了解后,我想我们就可以进入反汇编BIOS的旅途了。
分享到:
相关推荐
综合以上信息,这个"FULL-PACK-BIOS-BATOCERA-V32-TMCTV.rar"文件是一个为TMCTV准备的、全面的Batocera系统升级或安装包,包括了必要的BIOS文件以支持各种游戏平台的模拟,以及roms和saves目录,方便用户加载和保存...
刷BIOS需要使用Al Suite3,验证时用原版BIOS验证,刷入时将带有NVMe的BIOS文件替换原版文件(需同路径,同文件名),这样才可以过验证,正常刷入。 把M2硬盘转接插到PCIe 3.0上。...解决方法:进入BIOS->BOOT->SAT
该压缩文件"RH1288 V2-BIOS-V520.zip"包含了最新的BIOS版本,旨在提升服务器的性能、稳定性和安全性。本文将详细讲解RH1288 V2服务器、BIOS及其更新的重要性,以及如何进行固件升级。 首先,华为RH1288 V2是华为...
2. 进setup 菜单 --> 安全 --> 安全引导配置 目录下 “旧支持 = 启用” “安全引导 = 禁用”。 3. 按F10 保存然后重启进DOS环境: 4. 进入DoraXP/BIOS 目录运行 DPC_DMI.EXE /O XP.ini 来保存系统信息。 5. 关机,插...
刷BIOS需要使用Al Suite3,验证时用原版BIOS验证,刷入时将带有NVMe的BIOS文件替换原版文件(需同路径,同文件名),这样才可以过验证,正常刷入。 把M2硬盘转接插到PCIe 3.0上。...解决方法:进入BIOS->BOOT->SAT
标题中的“RH2288 V3-BIOS-V513.zip”指示了这是针对RH2288 V3服务器的BIOS更新,版本号为V513。通常,新的BIOS版本会修复已知问题、提升性能、增强兼容性,并引入新特性。 描述中提到,该BIOS更新需要在iBMC(智能...
在"BIOS入门之我见-界面-参考代码"中,你可能会看到一些汇编语言代码示例,它们展示了如何调用BIOS中断来实现上述功能。例如,`MOV AH, 02H` 设置了显示服务号,`MOV BH, 00H` 设置颜色页,`MOV DH, 10` 和 `MOV DL,...
本教程将深入探讨如何在C/C++编程环境中获取BIOS的相关信息,主要关注`Get-BIOS-information.rar`压缩包中的资源。 首先,了解BIOS的主要功能是关键。BIOS主要职责包括自检(POST - Power-On Self Test)、配置硬件...
I620-G20_I610-G20_I420-G20_S640-G20 BIOS和BMCI620-G20_I610-G20_I420-G20_S640-G20 BIOS和BMCI620-G20_I610-G20_I420-G20_S640-G20 BIOS和BMCI620-G20_I610-G20_I420-G20_S640-G20 BIOS和BMCI620-G20_I610-G20_I...
WIN98SE硬盘主引导记录代码反汇编分析硬盘引导记录MBR(Master Boot Record)是指硬盘之0面0道1扇区之内容,PC及其兼容机之ROM BIOS约定在上电及POST自检成功后,将其从硬盘读出,放置在内存0:7C00处,然后转去该...
标题中的"z97-hd3-bios-10c"指的是技嘉(Gigabyte)Z97-HD3主板的第10版本BIOS更新。BIOS(基本输入输出系统)是计算机硬件和操作系统之间的关键接口,负责在开机时执行初始化任务,并管理硬件设备的操作。版本号"10...
这个名为"FULL-PACK-BIOS-BATOCERA-V31.rar"的压缩包是BATOCERA的最新BIOS全量集合,版本号为V31。BIOS(基本输入/输出系统)在游戏模拟器中扮演着至关重要的角色,因为它们提供了原始游戏机硬件的软件仿真,使得在...
【小米游戏本9代最新版BIOS-XMGCF5R0P0504】是针对小米游戏笔记本电脑的一款重要固件更新,该版本号为0504,专为配备了NVIDIA GeForce RTX 2060显卡的设备设计。BIOS(基本输入输出系统)是计算机硬件和操作系统之间...
标题“联想扬天M4680N升级BIOS--90KT22CUS”指出的是针对联想扬天M4680N型号电脑进行BIOS固件的更新过程,其中90KT22CUS是这次升级的具体版本号。BIOS(基本输入输出系统)是计算机硬件与操作系统之间的重要接口,...
"BIOS源代码bios-img.zip"包含的CMOS BIOS源代码,为开发者和爱好者提供了深入了解BIOS工作原理、学习如何编写BIOS的宝贵资料。以下是基于这个主题的详细知识解析: 1. **BIOS的定义**:BIOS是固化在主板上的一段...
标题中的“bios-iqy0203ax64.zip”是一个BIOS更新程序的压缩文件,其中包含的“bios-iqy0203ax64.exe”是执行BIOS升级过程的具体程序。BIOS(基本输入输出系统)是计算机硬件与操作系统之间的一个关键接口,负责在...
标题"MAME 0.209 ROMs (bios-devices)"指的是MAME(Multiple Arcade Machine Emulator)0.209版本的ROM集合,其中包含了用于模拟BIOS设备的文件。MAME是一款开源的多平台游戏机模拟器,旨在重现各种经典街机游戏的...
- 在BIOS中的“Advanced”->“IPMI2.0/IPMIConfiguration”->“SetLANConfiguration”->“Static”菜单进行查看或设置。 ##### 4. NF5270M4/NF5280M4 - **步骤**: - 进入BIOS设置界面。 - 选择“ServerMgmt”->...
搬运 MAME模拟器 2022年12月最新版2.51的(bios-devices)文件,共计1239个文件 懂得都懂