首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消spte的映射?

如何取消spte的映射?
EN

Stack Overflow用户
提问于 2013-08-28 08:00:32
回答 1查看 277关注 0票数 3

我正在寻找一种方法来捕获kvm源代码中特定gfn上的"read“。

看起来函数栈通过使用PT_WRITABLE_MASK翻转写入位来移除给定页面的写权限。从而捕获写入。

代码语言:javascript
复制
rmap_write_protect(kvm, gfn) --> kvm_mmu_rmap_write_protect(kvm, gfn, slot)

对于陷阱读取,我看到了等效的标志PM_PRESENT_MASK。因此,一种方法可能是编写类似于上面的包装器例程,以翻转读取(存在)和写入位。或者使用下面的函数删除spte就足够了吗?drop_spte()

在上述任何一种方法之后,是否需要kvm_flush_remote_tlbs()?

EN

回答 1

Stack Overflow用户

发布于 2015-12-14 11:47:12

kvm_flush_remote_tlbs是必需的,因为即使您对来宾页面进行写保护或从当前CPU删除它,它们的映射也可能被缓存在其他CPU中。在您执行drop_spte之后,每当来宾尝试访问特定的gfn时,它都会捕获到主机。在__direct_map函数中更新EPT中的相应条目。如果您希望在每次访问时都陷入陷阱,则应该阻止kvm创建此类映射,而是可以通过调用emulate_instruction在kvm中模拟该指令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18477321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档