1

因此,假设我可以访问一个进程及其 mm_struct,有没有一种方法可以更改其中一个映射或删除一个映射并创建一个临时映射,以便我可以分配小于页面的数量并写入内存那?

例如,处理 ADD 指令上的写入错误。我可以相对容易地获得故障的地址和大小。我在本地分配了 8 个字节(最大的单指令大小)并弄乱了映射,以便出错的虚拟地址指向这 8 个字节的第一个字节。然后单步执行指令以获取用于另一个页面的数据,然后将原始页面恢复回映射。我只是好奇是否可以在进程的虚拟内存区域中使用页面以外的东西。

4

1 回答 1

2

您计算机的底层架构定义了您可以使用虚拟内存做什么和不能做什么。您尚未指定您的体系结构,但我非常有信心它不会允许您管理比页面更小的单元。

但要解决一个更大的问题,为什么内存大小很重要?每个线程都需要这个分配一次,只有当它出现故障时,它才会被分配给单个用户空间指令。只需使用一个新的、干净的页面来临时映射到您的流程中即可获得书面价值。它可能更容易编写,并且具有更好的安全性:它将避免将内核数据暴露给不受信任的(并且显然是错误的)应用程序。

于 2011-08-08T02:04:23.623 回答