Создание вызовов функций при доступе к данным в 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 при каждой инструкции и при каждом доступе к данным; позволяя мне настроить ядро, которое я использую, как я считаю нужным. Излишне говорить, что это очень крутая и очень мощная функция.

Мои вопросы:

  1. Доступна ли такая функция для программ, работающих на гипервизоре VMware ESXi (или VMware Workstation)? Если да, то где документация по этой функции?
  2. Если он недоступен на ESXi, доступен ли он на каких-либо других гипервизорах, таких как Xen?

Обратите внимание, что я НЕ спрашиваю, как запустить Simics под / поверх VMware, Xen, Bochs и т. Д. Я спрашиваю, возможно ли / как запустить обратный вызов при выборке инструкций и доступе к памяти (как я показали, что это возможно с Simics) на другой платформе, такой как VMware, Xen, Bochs, Qemu и т. д.


person DIMMSum    schedule 04.12.2016    source источник


Ответы (1)


Похоже, вы хотите использовать vProbes. vProbes позволяет вам динамически обрабатывать любые инструкции или доступ к данным в гостевой ОС, а затем выполнять сценарии обратного вызова. (не уверен, слышали ли вы о «Dtrace» для Solaris, но он похож). Я использовал его, например, для отслеживания вызовов функций внутри планировщика Linux. Скрипты должны быть написаны на C-подобном языке под названием Emmett. В этой статье подробно рассказывается о технологии и возможностях: https://labs.vmware.com/vmtj/vprobes-deep-observability-into-the-esxi-hypervisor

Кроме того, вот ссылка на справочное руководство для Workstation и Fusion. Он кажется немного староватым, но не думаю, что он сильно изменился. (Кстати, он работает на ESXi, а также на Workstation и Fusion) http://www.vmware.com/pdf/ws7_f3_vprobes_reference.pdf

person aaron.spear    schedule 08.02.2017