1

这篇文章向我展示了如何在 SMM 中查看内容。而且我注意到 Simics 显示了其他通常“隐藏”的寄存器,例如段描述符阴影值,它们只能间接更新。那么是否可以在 Simics 中看到“smbase”寄存器?

4

2 回答 2

2

首先,您可以使用apropos命令(简称a )在加载的配置中搜索特定字符串。而且由于 smbase 很可能通过一个属性暴露出来,它看起来像a -a smbase. 如果配置中有任何“smbase”,您将看到它。

我加载了 QSP-x86 Firststeps 平台并在表单上获得了几个点击

<cpu-class>.msr_ia32_smbase

此外,一般来说,它有助于了解特定事物的上下文。这样 smbase 是 MSR 的“一部分”。

#IAmIntel

于 2021-09-09T10:03:12.457 回答
2

要读取一个 MSR,目前您需要在处理器上使用接口调用。“%”运算符读取当前处理器上的命名寄存器。调用 iface 会检查任何处理器对象,并且适用于仅具有数量的 MSR。

使用在线帮助来了解如何使用该界面。例如:

simics> @conf.board.mb.cpu0.core[0][0].iface.x86_msr.get_number("IA32_TSC_DEADLINE")
1760
simics> api-help x86_msr_interface_t 
Help on API keyword "x86_msr_interface_t":

DESCRIPTION


SIM_INTERFACE(x86_msr) {
        void (*register_handlers)(
                conf_object_t *cpu,
                int64 number,
                x86_msr_getter_func_t getter,
                lang_void *getter_data,
                x86_msr_setter_func_t setter,
                lang_void *setter_data,
...

添加检查命令在愿望清单上。

更新。

该界面还提供了从编号查找名称的功能。对于 MSR 0x9E,IA32_SMBASE,在 Public Simics 的“客户端”核心上,查找名称会产生以下结果:

simics> @conf.board.mb.cpu0.core[0][0].iface.x86_msr.get_name(158)
'msr_ia32_smbase'
simics> @conf.board.mb.cpu0.core[0]0].iface.x86_msr.get_number("msr_ia32_smbase")
158

由于历史原因,该寄存器称为 msr_ia32_smbase,而不是手册中的 IA32_SMBASE。一般来说,按数字查找更可靠一些。特别是因为许多 MSR 在 Simics 模型中只有当前设置的数字。

于 2021-09-10T08:44:10.120 回答