我目前正在使用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
;允许我检测内核,我按照自己的意愿运行。毋庸置疑,这是一个非常酷且非常强大的功能。
我的问题是:
请注意,我 NOT 询问如何在VMware,Xen,Bochs等下运行Simics。我在询问是否可能/如何运行回调关于指令提取和内存访问(正如我在Simics上展示的那样)在另一个平台上,如VMware,Xen,Bochs,Qemu等。
答案 0 :(得分:1)
听起来你想要使用" vProbes"。 vProbes允许您动态检测来宾操作系统中的任何指令或数据访问,然后回调脚本。 (不确定你是否听说过" Dtrace"对于Solaris,但它是类似的)我用它来跟踪Linux调度程序内部的函数调用。脚本必须用类似C语言的Emmett编写。这篇文章很好地介绍了该技术以及可能的内容:https://labs.vmware.com/vmtj/vprobes-deep-observability-into-the-esxi-hypervisor
此外,这里还有工作站和Fusion参考指南的链接。它似乎有点旧,但我认为它没有太大变化。 (顺便说一句,它适用于ESXi以及工作站和Fusion) http://www.vmware.com/pdf/ws7_f3_vprobes_reference.pdf