我试图理解这个肮脏的CoW概念证明:https://github.com/dirtycow/dirtycow...ter/dirtyc0w.c。
当子线程(上面的链接中的procselfmemThread)写入由父级映射为MAP_PRIVATE和PROT_READ的内存时会发生什么?具体来说,内核是否将现有映射修改为匿名且可写?何时进行写时复制?让我们假设另一个子线程(上面链接中的madviseThread)没有运行。
答案 0 :(得分:0)
要准确回答您的问题,请分两部分回答 1.内存映射只读文件 由于您已使用PROT_READ和MAP_PRIVATE映射文件,因此将为您的文件创建VMA(虚拟内存区域)。 VMA只是一个元数据结构,可以管理您的过程域,如文本,数据和mmap区域。 VMA将具有起始和结束地址,这些起始和结束地址基本上是内存映射区域的进程虚拟地址,该区域是文件支持的,仅为红色区域(自PROT_READ起)。