假设我可以访问一个进程和它的mm_struct,是否有一种方法,我可以改变一个映射或删除映射,并创建一个临时的,这样我就可以分配一个量小于一个页面,并有内存写入?
例如,ADD指令上的进程写错误。我可以相对容易地得到故障的地址和大小。我在本地分配了8个字节(最大的单个指令大小),并对映射进行了修改,以便错误的虚拟地址指向这8个字节的第一个字节。然后单步执行指令以获取用于另一个页面的数据,然后将原始页面还原回映射。我只是好奇是否可以在一个进程的虚拟内存区域中使用页面以外的东西。
计算机的底层架构定义了对虚拟内存可以做什么和不能做什么。您还没有指定您的体系结构,但是我很有信心,它不会允许您管理比页面更小的单元。
但是要解决一个更大的问题,为什么内存大小很重要?只有当线程出现故障时,才需要为每个线程分配一次这个分配,并且它将分配给单个用户空间指令。只需使用一个新的、干净的页面来临时映射到您的进程中,以获得写入的值。它可能更容易编写,并且具有更好的安全性:它将避免将内核数据暴露给不受信任的(显然是错误的)应用程序。