Pinczakko的AwardBIOS逆向工程指导

这篇博客主要介绍了作者的老师关于人工智能的教程,强调教程适合零基础学习者,内容通俗易懂。鼓励读者访问指定链接进行学习,并提倡知识分享,以促进科技发展和民族复兴。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                Pinczakko的AwardBIOS逆向工程指导
作 者: beiyu
时 间: 2007-04-05,10:15
链 接: http://bbs.pediy.com/showthread.php?threadid=42166

Pinczakko的AwardBIOS逆向工程指导
作者:Pinczakko
翻译:beiyu http://beiyu.bokee.com
Email: beiyuly@gmail.com
时间:2006.6.6

ida的使用和最后展望没有翻译,希望有兴趣的朋友能够补上。

目录
Pinczakko的AwardBios逆向工程指导  1
1.序言  2
2.准备工作  2
2.1.PCI BUS  3
2.2.ISA BUS  4
3.一些硬件特性  4
3.1. BIOS 芯片地址  5
3.2. 晦涩的硬件接口(Port)  6
3.3. "可重定位" 硬件Port  8
3.4. Expansion ROM Handling  9
4.一些软件特性  10
4.1.call指令特性  10
4.2. retn Instruction Peculiarity  10
5. 用到的工具  13
5.1. 我们的需求  13
5.2. IDA Pro技术介绍  13
5.2.1. IDA Pro介绍  13
5.2.2. IDA Pro Scripting And Key Bindings  19
6. Award BIOS 文件结构  26
6.1.压缩部分  26
6.2. 纯二进制部分  27
6.3. 真实系统(Mainboard)中的内存印象  27
7. 反汇编BIOS  28
7.1. Bootblock  29
7.1.1. "Virtual Shutdown" routine  29
7.1.2. Chipset_Reg_Early_Init routine  29
7.1.3. Init_Interrupt_n_PwrMgmt routine  35
7.1.4. Call To "Early Silicon Support" Routine  36
7.1.5. Bootblock Is Copied And Executed In RAM  37
7.1.6. Call to bios decompression routine and the jump into decompressed system bios  39
7.1.6.1. Enable FFF80000h-FFFDFFFFh decoding  40
7.1.6.2. Copy lower 128KB of BIOS code from ROM chip into RAM  40
7.1.6.3. Disable FFF8_0000h-FFFD_FFFFh decoding  40
7.1.6.4. Verify checksum of the whole compressed BIOS image  40
7.1.6.5. Look for the decompression engine  41
7.1.6.6. Decompress the compressed BIOS components  41
7.1.6.7. Shadow the BIOS code  60
7.1.6.8. Enable the microprocessor cache then jump into the decompressed system BIOS  60
7.2. System BIOS a.k.a Original.tmp  61
7.2.1. Entry point from "Bootblock in RAM"  61
7.2.2. The awardext.rom and Extension BIOS Components (lower 128KB bios-code) Relocation Routine  62
7.2.3. Call to the POST routine a.k.a "POST jump table execution"  64
7.2.4. The "segment vector" Routines  68
7.2.5. "chksum_ROM" Procedure  72
7.2.6. Original.tmp Decompression Routine for The "Extension_BIOS Components"  72
7.2.7. Microcode Update Routine  90
8. 激昂展望  92
9. 结束语  92

1.序言
我非常欢迎你能够来实践复杂的Award Bios的代码研究工作。本文不是一篇官方的Award Bios逆向工程的文章,也不是由Award公司内部人员编辑的。我只是一个好奇的普通人,我真的很喜欢搞清楚我的电脑的Bios是怎样工作的。我写这篇文章的是为了公开我的发现和研究,从而回报那些我所犯的错误,都是我在逆向工程进程当中所犯的。你有几个可能性来读这篇文章,也许你是一个老资格的黑客,也许你是一个像我一样的系统程序设计爱好者,也许你只是一个好奇的外行。只有一点是肯定的,你肯定可以从这篇文章有所收获,可以提高你的技巧。无论如何,我已经写了一个准备章节,来保证你吸收这篇文章所具备的知识。
除非你自己反汇编了Bios的文件,你是不会理解搞清楚BIOS的工作的。
  这篇文章的目的是消除疑惑,定位好你自己,在开始对BIOS的逆向工程工作中,为你提供一个参考。
2.准备工作
  1.我必须承认,这个工作需要x86的知识。
  2.保护模式下的编成开发知识。你必须学会怎样让x86机器从实模式转移到保护模式。也就是说,你必须学会初步的x86保护模式OS开发。www.osdever.net是一个很好的学习这方面知识的网站。最重要的事情是保护模式的数据结构是怎样工作的。我的意思是GDT、IDT、x86控制寄存器和段寄存器是怎样工作的,特别是award bios用他们来实现他的奇妙的地方——稍后文章解释。
  3.什么是x86的不真实模式。他是一个x86机器在真是模式和保护模式之间的的状态——稍后文章解释。
  4.X86直接硬件编程开发。你需要知道怎样编程直接制硬件,特别是在你主板上面的。你可以联系这个,通过windows上的直接访问硬件程序开发练习。这个不是必需的,但是如果你懂的话,会给你带来很多方便。你也需要知道一些x86总线协议,比如PCI和ISA——稍后文章解释。
  5.你必须理解大部分你的主板芯片的手册。比如北桥和南桥控制寄存器。
2.1.PCI BUS
  官方的PCI总线标准系统是由PCISIG(PCI Special Interest Group)维持的。他可能是某种公司,他介于Intel和其他大公司,比如Microsoft。他将要被Arapahoe (PCI-Express a.k.a PCI-e) and Hypertransport代替。但是PCI曾经是在保持一种标准。Hypertransport向后兼容PCI。Arapahoe也是一样。只是这个PCI的标准是没有公开的。
  首先,PCI BUS是一个32位宽度的总线。通讯需要32bit的地址模式。读写操作需要32位地址。64位PCI Bus不是天生就是,他使用了双重地址回路实现。所以你可以说PCI就是一个32位总线的系统。
  其次,这个总线系统定义位置是,控制端口PORT CF8h – CFBh,数据端口CFCh – CFFh。这些端口用来配置相应的PCI芯片,比如读写PCI芯片的配置寄存器值。
  第三,这个总线系统强制我们和PCI通讯需要遵守下面的法则(从用户CPU观点):
1.  写目标总线号,设备号,功能号和偏移/寄存器号到配置地质端口,然后使能bit置1。通俗讲就是,写寄存器的地址到你想要写入的PCI地址端口。
2.  从一个配置数据端口执行一个one-byte, two-byte, or four-byte I/O读操作或者写操作。通俗讲就是,读写数据从你想要读写的PCI端口。
作为一个提示,据我所知,每一个今天用到的BUS/通讯协议,使用简单的法则来使芯片互相通讯,而这些芯片有一个复杂的总线协议。
有了上面的定义,这里提供一个x86的汇编码片断,来说明怎样使用这些配置端口。
No.  Mnemonic (masm syntax)  Comment
1  Pushad  保存所有通用寄存器的值
2  mov eax,80000064h  把将要访问的PCI芯片寄存器的地址放入eax
(offset 64h device 00:00:00 or hostbridge)
3  mov dx,0CF8h  地址端口放入dx。因为是PCI,我们用CF8h作为端口,来打开访问这个设备。
4  out dx,eax  发送PCI地址端口到processor的I/O空间
5  mov dx,0CFCh  数据端口放入dx。因为是PCI,我们用CFCh作为端口,来和这个设备数据通信。
6  in eax,dx  将从这个设备读出的数据放入eax
7  or eax, 00020202  改变数据(this is only example, don't 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值