因此,假设我可以访问进程及其mm_struct,是否有一种方法可以更改其中一个映射或删除映射并创建一个临时映射,以便我可以分配小于页面的数量并且具有记忆写到那个?
例如,处理ADD指令的写入错误。我可以相对轻松地获得故障的地址和大小。我在本地分配8个字节(最大的单个指令大小)并混淆映射,以便出现故障的虚拟地址指向这8个字节的第一个字节。然后单步执行指令以获取用于其他页面的数据,然后将原始页面还原回映射。我只是好奇是否可以在虚拟内存区域中使用除页面之外的其他内容进行处理。
答案 0 :(得分:2)
计算机的基础架构定义了虚拟内存可以做什么和不做什么。您尚未指定您的体系结构,但我非常有信心它不允许您管理任何小于页面的单元。
但是为了解决更大的问题,为什么内存大小很重要?每个线程需要一次这样的分配,只要它有问题,并且它将被分配给单个用户空间指令。只需使用一个新的,干净的页面临时映射到您的进程以获取书面值。它可能更容易编写,并且具有更好的安全性:它可以避免将内核数据暴露给不受信任(显然是有缺陷的)应用程序。