2022-11-15 18:10:32 +00:00
|
|
|
global enable_sse
|
|
|
|
enable_sse:
|
|
|
|
mov rax, cr0
|
|
|
|
and ax, 0xFFFB ;clear coprocessor emulation CR0.EM
|
|
|
|
or ax, 0x2 ;set coprocessor monitoring CR0.MP
|
|
|
|
mov cr0, rax
|
|
|
|
mov rax, cr4
|
|
|
|
or ax, 3 << 9 ;set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time
|
|
|
|
mov cr4, rax
|
|
|
|
ret
|
|
|
|
|
|
|
|
global enable_write_protect
|
|
|
|
enable_write_protect:
|
|
|
|
mov rax, cr0
|
|
|
|
or eax, 0x80000 ;set write-protect CR0.WP
|
|
|
|
mov cr0, rax
|
2022-11-15 19:41:59 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
global enable_nx
|
|
|
|
enable_nx:
|
|
|
|
mov rcx, 0xC0000080 ; IA32_EFER
|
|
|
|
rdmsr
|
|
|
|
or eax, 1 << 11 ; no-execute enable (NXE)
|
|
|
|
wrmsr
|
|
|
|
ret
|
|
|
|
|
|
|
|
global load_gdt
|
|
|
|
load_gdt:
|
|
|
|
cli
|
|
|
|
lgdt [rdi]
|
|
|
|
mov ax, 0x10
|
|
|
|
mov ds, ax
|
|
|
|
mov es, ax
|
|
|
|
mov fs, ax
|
|
|
|
mov gs, ax
|
|
|
|
mov ss, ax
|
|
|
|
push 0x08
|
|
|
|
lea rax, [rel .reload_CS]
|
|
|
|
push rax
|
|
|
|
retfq
|
|
|
|
.reload_CS:
|
|
|
|
ret
|
|
|
|
|
|
|
|
global load_tr
|
|
|
|
load_tr:
|
|
|
|
mov rax, rdi
|
|
|
|
ltr ax
|
2022-11-15 18:10:32 +00:00
|
|
|
ret
|