syscall = “jal”: // sysret: 逆操作 mov %rip, %rcx mov %rflags, %r11 set SS = kernel, SS = kernel, CPL = 0 jmp IA32_LSTAR // System Target Address Register
struct page_table_entry { uint32_t vpn, ppn, flags; // valid & protection } page_table[16];
void arm_with_vr(page_table *pt) { asm volatile( "set_ptbr %0" : : "r"(pt) : "memory" ); }
struct page *cr3; // 指向数据结构根的指针
struct tlb_entry { uint32_t vpn, ppn, flags; } tlb[16];
void bloat() { // 100M of nops asm volatile( ".fill 104857600, 1, 0x90" ); }
fork()