在 VMware ESXi 中生成对数据访问的函数调用

Generating function calls on data accesses in VMware ESXi

我目前正在使用 Simics module(参见第 6 章)来侦听指令获取和数据访问,并且 运行 对所有这些事件进行回调,以便检测内核 运行宁在 Simics x86 上。例如,我可以创建一个 Simics 模块,如下所示:

/* Initialize our Simics module. */
void init_local(void)
{
    const class_data_t funcs = {
        .new_instance = ls_new_instance,
        .class_desc = "desc",
        .description = "A simics module."
    };

    /* Register the empty device class. */
    conf_class_t *conf_class = SIM_register_class(SIM_MODULE_NAME, &funcs);

    /* Register our class class as a trace consumer. */
    static const trace_consume_interface_t trace_int = {
        .consume = (void (*)(conf_object_t *, trace_entry_t *))my_tool_entrypoint
    };
    SIM_register_interface(conf_class, TRACE_CONSUME_INTERFACE, &trace_int);
}

通过这样做,Simics 将在每条指令和每次数据访问时调用 my_tool_entrypoint;允许我检测内核 运行ning,因为我认为合适。不用说这是一个很酷很强大的功能。

我的问题是:

  1. 在 VMware ESXi(或 VMware Workstation)管理程序上 运行ning 的程序是否可以使用此功能?如果有,该功能的文档在哪里?
  2. 如果它在 ESXi 上不可用,它是否在 Xen 等任何其他管理程序上可用?

请注意,我 不是 询问如何 运行 Simics under/over VMware、Xen、Bochs 等。我在询问是否可能 /如何 运行 在其他平台(如 VMware、Xen、Bochs、Qemu 等)上对指令获取和内存访问进行回调(正如我展示的那样,使用 Simics 是可能的)

听起来你想使用 "vProbes"。 vProbes 允许您动态检测来宾 OS 中的任何指令或数据访问,然后是回调脚本。 (不确定您是否听说过 Solaris 的 "Dtrace",但它是相似的)例如,我用它来跟踪 Linux 调度程序内部的函数调用。脚本必须用一种叫做 Emmett 的 C-like 语言编写。这篇文章很好地阅读了技术和可能的内容:https://labs.vmware.com/vmtj/vprobes-deep-observability-into-the-esxi-hypervisor

此外,这里有一个 link Workstation 和 Fusion 的参考指南。看起来有点旧,但我认为它没有太大变化。 (顺便说一句,它适用于 ESXi 以及 Workstation 和 Fusion) http://www.vmware.com/pdf/ws7_f3_vprobes_reference.pdf