Open zoniony opened 4 years ago
系统学习基础知识的重要性 好的教育资源的重要性
Lab: xv6 lazy page allocation
xv6 book
xv6 book chinese这是x86下的用不了可以借鉴下的
先介绍一些基础知识
建议直接把清华大学公开课,虚拟地址转换[二] - 具体实现
这是基本的基本
了解Riscv如何通过虚拟地址寻址到物理地址。中间你得了解PPN,VPN,PTE,PageTable,PA,FLAGS等大量的基础知识
还有FLAGS每一位符号的作用,TLB和多级页表等加快查找PA等方式
而且这个实验要实现KPTI,要将内核和用户的页表分开,防熔炉漏洞。
以前我尝试利用成功过这个CPU利用cache加快速度而造成安全问题的漏洞,印象更加深刻一点
循环遍历每个page table中每个PTE,如果FLAGS标志位中Vail且RWX为零说明PTE是指向下一个page table
// Recursively free page-table pages. // All leaf mappings must already have been removed. static void freewalk(pagetable_t pagetable) { // there are 2^9 = 512 PTEs in a page table. for(int i = 0; i < 512; i++){ pte_t pte = pagetable[i]; if((pte & PTE_V) && (pte & (PTE_R|PTE_W|PTE_X)) == 0){ // this PTE points to a lower-level page table. uint64 child = PTE2PA(pte); freewalk((pagetable_t)child); pagetable[i] = 0; } else if(pte & PTE_V){ panic("freewalk: leaf"); } } kfree((void*)pagetable); }
这里卡了一下,PTE的最右边是10bit的FLAGS,先右移10bit得到的PPN,再向左移12位相当于乘以4096,得到下个page table的位置
#define PTE2PA(pte) (((pte) >> 10) << 12)
系统学习基础知识的重要性
好的教育资源的重要性page tables
Lab: xv6 lazy page allocation
xv6 book
xv6 book chinese这是x86下的用不了可以借鉴下的Page Table
先介绍一些基础知识
建议直接把清华大学公开课,虚拟地址转换[二] - 具体实现
这是基本的基本
了解Riscv如何通过虚拟地址寻址到物理地址。中间你得了解PPN,VPN,PTE,PageTable,PA,FLAGS等大量的基础知识
还有FLAGS每一位符号的作用,TLB和多级页表等加快查找PA等方式
而且这个实验要实现KPTI,要将内核和用户的页表分开,防熔炉漏洞。
以前我尝试利用成功过这个CPU利用cache加快速度而造成安全问题的漏洞,印象更加深刻一点
Xv6 source code
循环遍历每个page table中每个PTE,如果FLAGS标志位中Vail且RWX为零说明PTE是指向下一个page table
这里卡了一下,PTE的最右边是10bit的FLAGS,先右移10bit得到的PPN,再向左移12位相当于乘以4096,得到下个page table的位置
明天搞完