UEFI 系统上的传统 BIOS 存储在哪里?

逆向工程 英特尔 BIOS 尖峰 欧菲
2021-06-16 22:44:56

传统 BIOS(跳转到 F000:E05B 处的 POST 入口点的 16 位重置代码,实际上是 POST 本身和所有 BIOS 例程)在被隐藏到 0xF0000 之前最初存储在 UEFI 系统上的位置在哪里?以及隐藏到 0xC0000 之前的嵌入式选项 ROM?是什么使旧版 BIOS 变成了 0xF000:ME、启动 ACM、SEC 还是旧版 BIOS 本身?

它似乎不在 SPI 闪存 BIOS 区域中(我在 IDA 的转储中搜索了字节序列)。我认为它可能在 LPC 或 EC 闪存上,但我的笔记本电脑似乎没有(我的闪存描述符也没有显示 EC 区域,所以不要问我 EC ROM 存储在哪里,但它应该在 SPI 闪存上,并且原理图似乎没有显示它具有私有 SPI 闪存,但它必须这样做;也许这就是传统 BIOS 所在的位置?);加上看起来你只能配置PCH将所有 BIOS 范围发送到 LPC/eSPI 或 SPI,而不是将 0xF0000 发送到一个,将 0xFFFF0000 发送到另一个。我的笔记本电脑启动到旧版 BIOS,EA 为 0xFFFF0(显然是旧版 BIOS 影子),90 90 E9 为 0xFFFFFFF0。我在这方面找不到任何东西,我一直在逐字搜索的各种组合中搜索数小时、数百本手册、UEFI 论文、规范,但没有人提到它。

1个回答

传统 BIOS 代码通常以压缩形式存储在 UEFI 文件系统中。您可以在 UEFITool 中通过查找魔术字符串IFE$( 49 46 45 24) -EFI_COMPATIBILITY16_TABLE结构签名来找到它

在基于 AMI 的固件中,它通常是文件名 CSMCORE 的 RAW 子部分。以下脚本解析 AMI 格式的原始流并提取旧版 BIOS 以及可能存在的任何选项 ROM:https : //github.com/coreboot/bios_extract/blob/master/csmcoreparse.py