#ifndef _JOVE_x86_64_HAL_MSR_H #define _JOVE_x86_64_HAL_MSR_H 1 #include #define MSR_FS_BASE 0xC0000100 #define MSR_GS_BASE 0xC0000101 #define MSR_KGS_BASE 0xC0000102 #define MSR_EFER 0xC0000080 #define MSR_EFER_SCE 0b1 #define MSR_STAR 0xC0000081 #define MSR_LSTAR 0xC0000082 #define MSR_SFMASK 0xC0000084 union msr_gs_base { uintptr_t gs; uint32_t v[2]; }; union msr_star { struct { uint32_t eip; uint16_t kcs; uint16_t ucs; }; uint16_t v[2]; }; union msr_lstar { void *rip; uint32_t v[2]; }; void msr_set_gs_base(uintptr_t gs_base); uintptr_t msr_get_gs_base(void); void msr_enable_sce(void); void msr_set_lstar(void *syscall_entry); void msr_read(uint32_t msr, uint32_t *lo, uint32_t *hi); void msr_write(uint32_t msr, uint32_t lo, uint32_t hi); #endif