剖析脏牛3_-proc-self-mem是怎么实现的 | xxx剖析脏牛3_-proc-self-mem是怎么实现的 – xxx
菜单

剖析脏牛3_-proc-self-mem是怎么实现的

十月 27, 2021 - 安全客

robots

剖析脏牛3_-proc-self-mem是怎么实现的

 

测试程序

int fd;  struct stat st;  void *mem;    void processMem(void)  {      int f = open("/proc/self/mem", O_RDWR);      lseek(f, mem, SEEK_SET);      write(f, "AAA", 3);  }    int main(void)  {      fd = open("./test", O_RDONLY);      fstat(fd, &st);      mem = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);        processMem();  }  

 

sys_write()

剖析脏牛3_-proc-self-mem是怎么实现的

 

vfs_write()

剖析脏牛3_-proc-self-mem是怎么实现的

 

__vfs_write()

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

mem_write()

剖析脏牛3_-proc-self-mem是怎么实现的

 

mem_rw()

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

access_remote_vm()

剖析脏牛3_-proc-self-mem是怎么实现的

 

__access_remote_vm()

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

get_user_pages_remote()

剖析脏牛3_-proc-self-mem是怎么实现的

 

__get_user_pages_locked()

剖析脏牛3_-proc-self-mem是怎么实现的

 

__get_user_pages()

剖析脏牛3_-proc-self-mem是怎么实现的

然后通过一个do{…}while(nr_pages)循环, 遍历所有需要锁定的页, 处理一个页之前, 先找到所属的VMA

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

follow_page_mask()

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

follow_page_pte()

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

faultin_page()

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

__get_user_pages()第一次循环

faultin_page()      handle_mm_fault()          __handle_mm_fault()              handle_pte_fault()                  do_fault()                      do_cow_fault()                          alloc_page_vma()                          __do_fault()                          do_set_pte()  

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

__get_user_pages()第二次循环

剖析脏牛3_-proc-self-mem是怎么实现的

faultin_page()      handle_mm_fault()          __handle_mm_fault()              handle_pte_fault()                  do_wp_page()                      wp_page_reuse()                          maybe_mkwrite(pte_mkdirty(entry), vma);                          return VM_FAULT_WRITE;  

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

__get_user_pages()第三次循环

剖析脏牛3_-proc-self-mem是怎么实现的

剖析脏牛3_-proc-self-mem是怎么实现的

 

总结


Notice: Undefined variable: canUpdate in /var/www/html/wordpress/wp-content/plugins/wp-autopost-pro/wp-autopost-function.php on line 51