Функции плагина Qemu - как получить доступ к гостевой памяти и регистрам - PullRequest
0 голосов
/ 24 марта 2020

Фон

Qemu версия 4.2.0 , выпущенная De c '19, включила новую функциональность для чего-то, называемого TCG Plugins . У них есть несколько примеров в каталоге tests / plugins , а API более или менее определен в qemu-plugin.h .

Этот файл определяет два перечисленных типы qemu_plugin_cb_flags и qemu_plugin_mem_rw, которые передаются в функции, которые регистрируют обратные вызовы. Эти перечисления, кажется, указывают, будут ли обратные вызовы читать или записывать регистры процессора или память. Однако все примеры подключаемых модулей используют QEMU_PLUGIN_CB_NO_REGS, и только 2 из подключаемых модулей используют перечисление доступа к памяти. hotpages.c и mem.c используют QEMU_PLUGIN_MEM_RW в качестве значения по умолчанию для регистрации обратного вызова памяти (qemu_plugin_register_vcpu_mem_cb). У mem.c есть аргумент, когда плагин загружается, чтобы выбрать, будет ли он читать или писать, однако в функции обратного вызова, похоже, нет никакой разницы.

Вопрос

Мой вопрос такое, как я могу получить доступ к гостевой памяти и регистрам из функции обратного вызова плагина? Похоже, API указывает на то, что это возможно, поскольку регистрация обратного вызова требует, чтобы вы указали, будете ли вы получать к ним доступ, и если это RW или просто чтение.

Есть ли примеры использования этой части API? Я понимаю, что это очень новая часть функциональности Qemu.

Код

Когда вы регистрируете обратный вызов для инструкции, как в insn. c, вы можете получить виртуальный адрес инструкции.

uint64_t insn_vaddr = qemu_plugin_insn_vaddr(insn);

Я запускаю программу ARM без обработки металла, и этот виртуальный адрес, по-видимому, соответствует адресу инструкции в файле ELF.

Внутри функций обратного вызова памяти вы можете вызвать qemu_plugin_get_hwaddr, чтобы получить аппаратный адрес доступа к памяти, но я не совсем уверен, что представляет эта структура.

Связано

Этому ответу 7 лет и предлагается использовать интерфейс GDB. Мой вопрос, в частности, связан с использованием функциональности плагина TCG.

Кроме того, должен ли быть тег для QEMU Tiny Code Generator (TCG)?

...