Obecnie używam Simics module (patrz rozdział 6) do odsłuchiwania pobierania instrukcji i dostępu do danych oraz uruchamiania wywołań zwrotnych we wszystkich tych zdarzeniach, aby instrument obsługił jądro, które jest uruchomione Simics x86. Na przykład, można utworzyć moduł Simics następująco:Generowanie wywołań funkcji na dostępach do danych w VMware ESXi
/* 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);
}
Dzięki temu Simics wezwie my_tool_entrypoint
na każdej instrukcji i każdy dostęp do danych; pozwalając mi na przyswojenie jądra, które używam, jak uważam za stosowne. Nie trzeba dodawać, że jest to bardzo fajna i bardzo potężna funkcja.
Moje pytania są następujące:
- Czy taka funkcja dostępna dla programów uruchomionych na VMware ESXi (lub VMware Workstation) Hypervisor? Jeśli tak, to gdzie jest dokumentacja tej funkcji?
- Jeśli nie jest dostępny w ESXi, czy jest dostępny dla innych hypervisorów, takich jak Xen?
Zauważ, że jestem NIE pytając jak uruchomić Simics pod/nad VMware, Xen, Bochs itp Pytam, czy jest to możliwe/jak uruchomić oddzwanianie instrukcja pobiera i pamięć dostęp (jak Pokazałem było możliwe z Simics) na innej platformie, takiej jak VMware, Xen, Bochs, Qemu itp.