我想查看解压的 PC BIOS 映像代码。我看到的第一种方法是从供应商处下载 BIOS Flash 更新,但它是打包的。我该如何解压它?感兴趣的供应商是 Gigabyte、ASUS、Supermicro、HP。第二种方法是完全转储当前 BIOS。我可以在 Windows 或 Linux 上转储 BIOS 映像吗?
以华硕 1MB ROM 为例
0000:0000 | 41 53 55 53 54 45 4B 00 00 00 00 00 00 00 00 00 | ASUSTEK.........
0000:0010 | FF FF FF FF FF FF FF FF FF FF FF FF 08 C0 01 00 | ЪЪЪЪЪЪЪЪЪЪЪЪ.ю..
0000:0020 | F1 3F 5C A4 08 00 90 CB FF FF 11 90 00 00 00 00 | Я?\╓..░кЪЪ.░....
0000:0030 | 01 00 00 00 07 0A 00 00 08 20 09 04 7A 06 01 00 | ......... ..z...
0000:0040 | 5A 7F 06 83 01 00 00 00 11 00 00 00 D0 1F 00 00 | Z..┐........п...
0000:0050 | 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . ..............
0000:0060 | 00 00 00 00 A1 00 00 00 01 00 02 00 07 0A 00 00 | ....║...........
0000:0070 | 1A 00 00 00 00 00 00 A4 08 04 08 20 01 04 00 00 | .......╓... ....
0000:0080 | 01 00 00 00 7A 06 01 00 00 00 00 00 00 00 00 00 | ....z...........
0000:0090 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0000:00A0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0000:00B0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0000:00C0 | 66 48 29 C4 14 A1 20 3E 9C F1 87 83 AA 14 FB DA | fH)д.║ >°Я┤┐╙.Шз
0000:00D0 | 09 83 A3 33 EA F8 B0 68 00 B2 20 2A 9E AA C7 CD | .┐ё3ЙЬ╟h.╡ *·╙гм
0000:00E0 | C7 E7 0C 17 05 C7 27 D7 A5 1B 9B 01 29 4A 41 E0 | гГ...г'в╔.⌡.)JAЮ
0000:00F0 | 58 54 D4 57 11 A4 A8 26 66 D9 AA 9F B0 C8 5E 09 | XTтW.╓╗&fы╙÷╟х^.
0000:0100 | 2A 7C 3A 08 0F C7 CF 17 A8 78 8E 3C 19 C4 18 CE | *|:..го.╗x▌<.д.н
0000:0110 | B7 DE 2D 5F 71 5D C9 C9 16 51 7A 43 D0 3A 25 E0 | ╥ч-_q]ии.QzCп:%Ю
这看起来不像是可以反汇编的代码(刚刚检查过,其中有 fp 和 int 机器码的混合)。也许它是加密的?
答案1
http://www.phrack.org/issues.html?issue=66&id=11描述 ASUS 1MB *.ROM 文件的解包器:
ASUS BIOS 基于 AMI BIOS,因此我们使用 AMIBIOS BIOS 模块操作实用程序 MMTool.exe 来提取主 BIOS 模块。在 MMTool 中打开下载的 .ROM 文件,选择提取“单链接架构 BIOS”模块 (ID=1Bh),选中“以未压缩形式”选项并保存。这是未压缩的主 BIOS 模块。
答案2
该文件格式完全专有,因此您可能无法找到它的格式或可以读取它的程序。
在 Windows 中,您仍然可以使用 dos 调试命令反汇编 F000:0000 块中的 BIOS,但如今,系统 BIOS 远大于 64 或 128k,因此只有其中一部分在内存的该区域中可见(16 位兼容性部分)。其余部分的保存位置完全取决于 BIOS,使其可见通常涉及在某个硬件寄存器中设置一个位,从而将 RAM 地址块更改为完整的 BIOS ROM。具体细节取决于芯片组,但只能在保护模式下访问。在用户模式下无法操作硬件寄存器和访问该内存。