对应场景
1) so 映射的 rw的数据段,bss段
2)私有文件映射,如脏牛漏洞例子
3) 一些不希望修改源文件的场景,可能某些调试和trace场景需要,如/proc/pid/mem
流程
do_cow_fault
- alloc_page_vma 分配cow_page
- __do_fault 从原文件将页面读出来,内容存放在文件的page cache上面,即address_space的页面上面
- 将page cache页面拷贝到 cow_page上面
- finish_fault 建立cow_page和虚拟物理页面的页表映射,后续读写发生在cow_page 上面
疑问
直接写文件映射的vma属性和 so的rw段的映射属性关系?
实测实验:
- 写只读代码段
- 写rw bss
- 直接写文件
参考学习资料
https://www.anquanke.com/post/id/257350