`
insertyou
  • 浏览: 889331 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【我所认知的BIOS】->反汇编BIOS之Bootblock(10)

阅读更多

【我所认知的BIOS->反汇编BIOSBootblock(10)

-- 基本的内存检测copy BIOS to RAM

By Lightseed

6/28/2010

1BIOS的主流程

BIOS执行到这里,bootblock任务基本完成。内存初始化好了以后,为了能够安全地把BIOS copy到内存中,还需要做一些安全性的检测呀什么的。让我们来继续往下看吧。

1 BIOS主流程

2Copy BIOS之前test基本内存

废话不用多说,让我们来看看反汇编出来的代码吧。

_F000:E3B5 ;Test first 256Kb memory , Send endless beep if DRAM is bad

_F000:E3B5

_F000:E3B5 loc_FE3B5: ; CODE XREF: _F000:E3E7j

_F000:E3B5 mov es, dx

_F000:E3B7 assume es:seg000

_F000:E3B7 cld

_F000:E3B8 mov cx, 2000h

_F000:E3BB xor di, di

_F000:E3BD repe stosd

_F000:E3C0 not eax

_F000:E3C3 mov cx, 2000h

_F000:E3C6 repe stosd

_F000:E3C9 not eax

_F000:E3CC mov cx, 2000h

_F000:E3CF xor di, di

_F000:E3D1 repe scasd

_F000:E3D4 jnz Error_Beep_Out

_F000:E3D6 not eax

_F000:E3D9 mov cx, 2000h

_F000:E3DC repe scasd

_F000:E3DF jnz Error_Beep_Out

_F000:E3E1 add dh, 10h

_F000:E3E4 cmp dh, 40h ; '@'

_F000:E3E7 jnz loc_FE3B5

_F000:E3E9 jmp short Ok_256K

_F000:E3EB ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E3EB

_F000:E3EB Error_Beep_Out: ; CODE XREF: _F000:E3D4j

_F000:E3EB ; _F000:E3DFj ...

Call Sound_Speaker ;伪代码

;死循环,BIOS让自己死在这里,让beep一直响,因为最基本的内存检测出错了。

Ok_256K: ;到这里的话,说明基本的内存检测已经通过。

_F000:E439 cmp dword ptr [esi+0FFF5h], 'BRM*' ; Saginature of Compress

_F000:E445 jz Have_Find_compress_code

;Move entire BIOS from E0000-FFFFF to 10000-2FFFF

Call move_BIOS_code ;伪代码

_F000:E482 jmp far ptr 2000h:0E487h ; Here BIOS copy itself to RAM

_F000:E482 ; Althrough BIOS will use FAR JMP to run at 2000:0, but code is continuous.

_F000:E482 ; So we can go on disassembling in F0000

从上面的代码中,我们可以看到,BIOS会做一些其他的flag的处理。这没什么难度,看注释就好了。我主要是要说说关于那256KB基本内存的检测。原理很简单,就是向从0开始低端内存开始,往里面写入特殊的值,然后再读出来比对,从而来判断内存是否是存在的。如果不存在,那么在这里就会无限地beepout

3beepout子函数

关于beep的函数,其实在peterblog里面有很详细的阐述了,所以我在这里也就不多赘述。只是把反汇编出来的源码贴出来,让大家看看咱们的BIOS实际上是怎么写这这里的code的。很有参考价值哦。呵呵。。。

_F000:FBB8 Sound_Speaker proc near ; CODE XREF: _F000:E3F0j

_F000:FBB8 mov cx, 533h

_F000:FBBB mov al, 0B6h ; '?

_F000:FBBD ;----------------------------------------------------------------------

_F000:FBBD bit 7,6

_F000:FBBD 00 = Counter 0 select

_F000:FBBD 01 = Counter 1 select

_F000:FBBD 10 = Counter 2 select

_F000:FBBD 11 = Read Back Command

_F000:FBBD bit 5,4

_F000:FBBD 00 = Counter Latch Command

_F000:FBBD 01 = Read/Write Least Significant Byte (LSB)

_F000:FBBD 10 = Read/Write Most Significant Byte (MSB)

_F000:FBBD bit 3-1

_F000:FBBD 000b Mode 0 Out signal on end of count (=0)

_F000:FBBD 001b Mode 1 Hardware retriggerable one-shot

_F000:FBBD x10b Mode 2 Rate generator (divide by n counter)

_F000:FBBD x11b Mode 3 Square wave output

_F000:FBBD 100b Mode 4 Software triggered strobe

_F000:FBBD 101b Mode 5 Hardware triggered strobe

_F000:FBBD 11 = Read/Write LSB then MSB

_F000:FBBD bit 0

_F000:FBBD 0 = Binary countdown is used. The largest possible binary count is 216

_F000:FBBD 1 = Binary coded decimal (BCD) count is used. The largest possible BCD count is 104

_F000:FBBD

_F000:FBBD

_F000:FBBD B6H = select Counter 2, R/W MSB, mode 3, binary countdown is used.

_F000:FBBD ;----------------------------------------------------------------------

_F000:FBBD out 43h, al ; Timer Control Word Register

_F000:FBBF mov ax, cx ; CX = Initial value of timer 2

_F000:FBC1 out 0EBh, al

_F000:FBC3 out 42h, al ; Timer 8253-5 (AT: 8254.2).

_F000:FBC5 mov al, ah

_F000:FBC7 out 0EBh, al

_F000:FBC9 out 42h, al ; Timer 8253-5 (AT: 8254.2).

_F000:FBCB in al, 61h ; PC/XT PPI port B bits:

_F000:FBCB ; 0: Tmr 2 gate 退? OR 03H=spkr ON

_F000:FBCB ; 1: Tmr 2 data AND 0fcH=spkr OFF

_F000:FBCB ; 3: 1=read high switches

_F000:FBCB ; 4: 0=enable RAM parity checking

_F000:FBCB ; 5: 0=enable I/O channel check

_F000:FBCB ; 6: 0=hold keyboard clock low

_F000:FBCB ; 7: 0=enable kbrd

_F000:FBCD mov ah, al ; Save the data of 61h

_F000:FBCF or al, 3

_F000:FBD1 out 0EBh, al

_F000:FBD3 out 61h, al ; PC/XT PPI port B bits:

_F000:FBD3 ; 0: Tmr 2 gate 退? OR 03H=spkr ON

_F000:FBD3 ; 1: Tmr 2 data AND 0fcH=spkr OFF

_F000:FBD3 ; 3: 1=read high switches

_F000:FBD3 ; 4: 0=enable RAM parity checking

_F000:FBD3 ; 5: 0=enable I/O channel check

_F000:FBD3 ; 6: 0=hold keyboard clock low

_F000:FBD3 ; 7: 0=enable kbrd

_F000:FBD5

_F000:FBD5 loc_FFBD5: ; CODE XREF: Sound_Speaker+2Cj

_F000:FBD5 mov cx, 5000h ; Delay

_F000:FBD8

_F000:FBD8 loc_FFBD8: ; CODE XREF: Sound_Speaker+28j

_F000:FBD8 out 0EBh, al

_F000:FBDA out 0EBh, al

_F000:FBDC out 0EBh, al

_F000:FBDE out 0EBh, al

_F000:FBE0 loop loc_FFBD8

_F000:FBE2 dec bl

_F000:FBE4 jnz loc_FFBD5

_F000:FBE6 mov al, ah ; Restore the data of 61h

_F000:FBE8 out 61h, al ; PC/XT PPI port B bits:

_F000:FBE8 ; 0: Tmr 2 gate 退? OR 03H=spkr ON

_F000:FBE8 ; 1: Tmr 2 data AND 0fcH=spkr OFF

_F000:FBE8 ; 3: 1=read high switches

_F000:FBE8 ; 4: 0=enable RAM parity checking

_F000:FBE8 ; 5: 0=enable I/O channel check

_F000:FBE8 ; 6: 0=hold keyboard clock low

_F000:FBE8 ; 7: 0=enable kbrd

_F000:FBEA retn

_F000:FBEA Sound_Speaker endp

3BIOScopy

当内存检测完毕,一切准备就绪的时候,award bios就会准备把biosROMcopy到实际的RAM中来。当然在做这些之前还做了其他的动作,比如说操作timer呀什么的,看上面的代码就好,不赘述了。

_F000:E439这行开始,bios先去在F000段搜索是否有压缩的字样(当然肯定是有啦。)找到后,把BIOSROM里面copy出来,分别放到了10000-2FFFFHE000F000分别对应10002000)对应的RAM里面,同时也备份了一份到180000H-19FFFFH里面。然后用一个FAR jmp_F000:E482这行就可以看出来。)彻底让CPURAM里面取指令了。

不过,需要说明的是:虽然bios是被copy到了10002000段里来,也确实用了FAR jmp指令来跳转,但是由于此时BIOS ROM里面的源码和在10002000段里面的源码是一模一样的。所以,我们目前还是可以继续在当前的bin文件里面反汇编的哦。所以我们可以假设目前的BIOS源码就是在2000(对应到了F000)段里了。这里的思维转换一定要转换过来!!因为后面还有难度更大的转换。

4、小结

这个章节里面主要和大家讨论了BIOS把自身从ROM里面copyRAM里面的过程。也说明了,为什么我们还要继续用当前的bin文件来反汇编。

分享到:
评论

相关推荐

    AMI BIOS代码详解

    **D5** - BOOTBLOCK检查,这是BIOS的一个小部分,能够在主BIOS损坏时引导系统。 **D6** - BIOS校验和,用于验证BIOS代码的完整性和未被篡改。 **D7** - CPUID检查,确认处理器型号和特性,以优化系统性能。 **D8*...

    联想M2630D BIOS .zip

    描述中提到了“万能BIOS备份工具”,这类工具如Award Bootblock BIOS Recovery、AMI BIOS Backup等,能够帮助用户安全地备份现有的BIOS到ROM文件,以防意外情况导致BIOS损坏,从而无法启动计算机。备份BIOS是一个...

    主板BIOS刷新和修复方法

    接着,根据主板所使用的BIOS类型(如Phoenix-AwardBIOS或AMI BIOS),下载对应的BIOS刷新工具(如Awdflash或Amiflash)。通过命令行模式执行刷新工具,并指定新BIOS文件的位置,即可开始刷新过程。需要注意的是,在...

    M6117D BIOS 自检码

    ### M6117D BIOS自检码详解 #### 标题解读 “M6117D BIOS 自检码”这一标题明确指出本文档主要介绍M6117D型号计算机主板上使用的BIOS(基本输入/输出系统)自检代码的相关信息。 #### 描述解析 描述部分重复了标题...

    Project1任务二-开发板BIOS服务调用1

    在 bootblock.s 文件中,需要加入 nop 指令使得程序从要运行的第一条指令开始运行,如 start code 中加入了 10 条 nop 指令,每条 nop 指令为 4 个字节,共增加了 40 字节的空间,即 0x28。 测试 在本任务中,需要...

    非物理损坏的计算机BIOS芯片的修复.pdf

    BootBlock块是BIOS中用于系统启动的引导模块,如果BIOS刷新失败,但BootBlock块未被破坏,那么可以利用BootBlock块进行修复。修复步骤包括制作系统启动盘、拷贝BIOS升级文件和刷新程序到启动盘上,然后在计算机启动...

    论文研究-基于BIOS和USB盘实现对PC机的安全访问.pdf

    BIOS通常存储在计算机主板上的ROM或Flash Memory中,其中包含了引导代码(BOOTBLOCK)和配置数据(ESCD),以及一系列的中断服务例程。 2. USB(Universal Serial Bus)通用串行总线:USB是一种广泛使用的串行总线标准,...

    修改主板LOGO

    可以使用工具如Award BootBlock BIOS Recovery或Flash Utility来备份。 3. **获取新LOGO**:新LOGO通常为BMP格式,分辨率一般为320x240像素,颜色深度为256色(8位)。你需要一个符合规格的图像编辑软件来创建或...

    ucore lab1 参考答案(转载)

    接下来,使用objdump反汇编bootblock.o,生成bootblock.asm,然后使用objcopy把ELF格式的执行文件bootblock.o转换成二进制格式的执行文件bootblock.out。最后,使用sign执行程序,把bootblock.out扩展到512字节,...

    mkbb.rar_bootblock

    【mkbb.rar_bootblock】是一个与引导块(bootblock)相关的工具,主要目的是为了创建一个适合SRM(System ROM Monitor)控制台微型加载器的引导扇区。在深入讲解这个工具之前,我们先来理解一下引导块和SRM的概念。 ...

    清华大学ucore lab1实验报告.docx

    - `bootblock`依赖于`bootasm.o`和`bootmain.o`,通过`ld`链接生成`bootblock.o`,然后使用`objdump`进行反汇编,`objcopy`将其转化为二进制文件。`sign`程序用于对生成的bootblock进行签名。 1.1.3 **ucore.img...

    电脑各种错误信息提示的中文意思.docx

    本文将详细解析一些常见的BIOS、BIOS刷新失败后的Bootblock、MBR主引导区以及DOS活动分区中的错误信息,帮助用户理解其含义并采取相应措施。 1. BIOS中的提示信息: - Drive A error: 表示软驱A有问题。 - System...

    BIOS安全更新及保护系统设计

    综上所述,该BIOS安全更新及保护系统构建了一个立体的防护网,通过硬件、固件和软件的三层保护,有效防止了恶意软件对BIOS的攻击和篡改,确保了系统的稳定运行和信息安全。这一设计对于提升计算机系统的整体安全性,...

    HP_Z420_Z620_Z820_BootBlock_Upgrade:有关如何使“版本1”的HP Z420,Z620和Z820工作站与Ivy Bridge处理器兼容的指南和资源集合

    HP Z420 Z620 Z820 BootBlock升级 有关如何使“版本1”的HP Z420,Z620和Z820工作站与Ivy Bridge处理器兼容的指南和资源集合。 请参阅此存储库中的PDF以获取指南,并随时发布问题! 相关论坛主题: : 软件Flash...

    AwardBIOS逆向工程指导

    这是一篇Award BIOS逆向工程的文章,可以加深对BIOS工作流程的认知,提到很多我们在逆向工程中经常犯的错误, 是一篇很好的文章

    电脑常见错误提示的中文解释.pdf

    20. **Bootblock启动时的提示信息** - 硬件初始化失败,可能需要检查硬件配置或BIOS更新。 21. **MBR 主引导区提示信息** - 主引导记录(MBR)损坏可能导致无法启动操作系统。 22. **Error loading operating ...

    计算机故障中英文对照表.docx

    2. BIOS刷新失败后的Bootblock启动提示: - Detecting floppy drive A media:检测软驱A的介质类型。 - Drive media is: 1.44Mb1.2Mb 720Kb 360K:显示软驱格式信息。 - DISK BOOT FAILURE, INSERT SYSTEM DISK ...

    计算机常见报警错误信息中英文对照表-电子电路图,电子技术资料网站(宝典指南).pdf

    2. **BIOS刷新失败后的Bootblock启动提示** - **Detecting floppy drive A media...**:检测软驱A的媒介类型,如果失败,可能是软驱问题。 - **Drive media is : 1.44Mb1.2Mb 720Kb 360K**:显示软盘驱动器的容量...

Global site tag (gtag.js) - Google Analytics