Qemu version 4.2.0 includes new functionality for something called TCG Plugins. There are a few examples in the tests/plugins directory, and the API is more or less defined in qemu-plugin.h.
This file defines two enumerated types,
"qemu_plugin_cb_flags" and
"qemu_plugin_mem_rw", which are passed into functions that register callbacks. These enums seem to indicate whether the callbacks will read or write CPU registers or memory. However, all of the example plugins use
"QEMU_PLUGIN_CB_NO_REGS", and only 2 of the plugins use the memory access enum. hotpages.c and mem.c use
"QEMU_PLUGIN_MEM_RW" as the default for registering a memory callback (
qemu_plugin_register_vcpu_mem_cb). mem.c has an argument when the plugin is loaded to choose if it's read or write, however, it doesn't seem to make any difference in the callback function.
My question is, how do I access the guest memory and registers from the plugin callback function? The API seems to indicate that it is possible, since the callback registering requires you to say if you will access them, and if it's RW or just read.
Are there any examples of using this part of the API? I realize this is a very new part of Qemu functionality.
Thanks