我正在寻找一种方法来捕获 kvm 源中特定 gfn 上的“读取”。
看起来函数堆栈通过使用 PT_WRITABLE_MASK 翻转写入位来删除给定页面的写入权限。从而捕获写入。
rmap_write_protect(kvm, gfn) --> kvm_mmu_rmap_write_protect(kvm, gfn, slot)
对于捕获读取,我看到等效标志 PM_PRESENT_MASK。因此,一种方法可能是编写类似于上面的包装程序来翻转读取(存在)和写入位。或者使用下面的函数来删除 spte 就足够了吗?drop_spte()
在上述任何一种方法之后是否需要 kvm_flush_remote_tlbs() ?