3

我想了解 QSP-x86 项目是否在模拟 SMM。我在 GUI 调试器的可用寄存器/内存中没有看到任何东西,这表明我有办法查看 SMRAM / SMI 处理程序代码。因此,我想知道是否可以使用它来调试一些 SMM 代码。

我找到了一个页面,上面写着“Simics 快速启动平台是一个基于 Intel 的平台,它从基于 TianoCore 的启动......”,那么 Simics QSP 源代码是否可以在某处获得?或者它只是 EDK2/UDK 的一个特殊版本?如果是这样,哪个构建以及如何构建它?(因为如果它只是一个我可以摆弄的特定 TianoCore 构建,那会让我的生活更轻松。)

4

1 回答 1

3

关于 UEFI:

如果您查看https://software.intel.com/content/www/us/en/develop/articles/simics-simulator.html有一个链接到https://github.com/tianocore/edk2-platforms/树/主/平台/英特尔/SimicsOpenBoardPkg

您还可以查看另一个与 QSP 兼容的 BIOS 的 Slim Boot Loader 项目:https ://slimbootloader.github.io/supported-hardware/qsp.html

SMM:

要在目标内核进入 SMM 时停止,请使用 hap 断点(目前没有可用的专用命令)。IE,bp.hap.break

如果您在运行 qsp-client-core.simics 脚本后使用它,您应该会看到:

simics> bp.hap.break X86_Enter_SMM
Breakpoint 1: Break on hap X86_Enter_SMM
simics> bp.list
┌──┬──────────────────────────┬───────┬───────┬────────────┬─────────┐
│ID│       Description        │Enabled│Oneshot│Ignore count│Hit count│
├──┼──────────────────────────┼───────┼───────┼────────────┼─────────┤
│ 1│Break on hap X86_Enter_SMM│  true │ false │           0│        0│
└──┴──────────────────────────┴───────┴───────┴────────────┴─────────┘
simics> r
[board.mb.sb.lpc.bank.cs_conf unimpl] Write to unimplemented field cs_conf.oic.aen (0x31ff) (value written = 0x01, contents = 0x00), will not warn again.
[board.mb.cpu0.core[1][0]] Breakpoint 1: board.mb.cpu0.core[1][0] X86_Enter_SMM 0
[board.mb.cpu0.core[1][0]] Breakpoint 1: board.mb.cpu0.core[1][0] X86_Enter_SMM 1
simics> pselect board.mb.cpu0.core[1][0]
Setting new inspection object: board.mb.cpu0.core[1][0]
simics> si
[board.mb.cpu0.core[1][0]] cs:0x0000000000008000 p:0x0000038000  mov ebp,dword ptr cs:[0x8010]
simics>

当任何处理器内核进入 SMM 时 Simics 停止。请注意,您可能必须选择执行停止的处理器。另请注意,精确输出可能会随 Simics 基础版本和模型而变化。

于 2021-08-31T11:48:33.353 回答