Simics 使用 SMM 吗?

Does Simics use SMM?

我想了解 QSP-x86 项目是否在模拟 SMM。我在 GUI 调试器的可用 registers/memory 中没有看到任何提示我可以查看 SMRAM / SMI 处理程序代码的方法。因此我想知道我是否可以用它来调试一些 SMM 代码。

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

关于 UEFI:

如果你看https://software.intel.com/content/www/us/en/develop/articles/simics-simulator.html there is a link to https://github.com/tianocore/edk2-platforms/tree/master/Platform/Intel/SimicsOpenBoardPkg

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

SMM:

要在目标内核进入 SMM 时停止,请使用 hap 断点(目前没有可用的专用命令)。即,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 停止。请注意,您可能必须 select 执行停止的处理器。另请注意,精确输出可能会随着 Simics 基础和模型的版本而变化。