You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
1.9 KiB
159 lines
1.9 KiB
[global _ss]
|
|
[global _cs]
|
|
[global _ds]
|
|
[global _es]
|
|
[global _fs]
|
|
[global _gs]
|
|
[global inb]
|
|
[global outb]
|
|
[global get_rflags]
|
|
[global set_rflags]
|
|
[global set_cr0]
|
|
[global get_cr0]
|
|
[global _cr2]
|
|
[global _cr3]
|
|
[global set_cr4]
|
|
[global get_cr4]
|
|
[global _ltr]
|
|
[global read_msr]
|
|
[global write_msr]
|
|
[global _rbp]
|
|
|
|
[section .text]
|
|
|
|
_ds:
|
|
xor rax,rax
|
|
mov ax, ds
|
|
ret
|
|
|
|
_ss:
|
|
xor rax,rax
|
|
mov ax, ss
|
|
ret
|
|
|
|
_cs:
|
|
xor rax,rax
|
|
mov ax, cs
|
|
ret
|
|
|
|
_es:
|
|
xor rax,rax
|
|
mov ax, es
|
|
ret
|
|
|
|
_gs:
|
|
xor rax,rax
|
|
mov ax, gs
|
|
ret
|
|
|
|
_fs:
|
|
xor rax,rax
|
|
mov ax, fs
|
|
ret
|
|
|
|
_rbp:
|
|
mov rax, rbp
|
|
ret
|
|
|
|
|
|
; void get_cr0(uint64_t cr3)
|
|
get_cr0:
|
|
mov rax, cr0
|
|
ret
|
|
; uint64_t set_cr0(void)
|
|
set_cr0:
|
|
mov cr0, rdi
|
|
ret
|
|
|
|
; uint64_t get_cr2(void)
|
|
_cr2:
|
|
mov rax, cr2
|
|
ret
|
|
|
|
; void cr3(uint64_t cr3)
|
|
_cr3:
|
|
mov cr3, rdi
|
|
ret
|
|
|
|
|
|
; void get_cr4(uint64_t cr3)
|
|
get_cr4:
|
|
mov rax, cr4
|
|
ret
|
|
; uint64_t set_cr4(void)
|
|
set_cr4:
|
|
mov cr4, rdi
|
|
ret
|
|
|
|
|
|
get_rflags:
|
|
pushfq
|
|
pop rax
|
|
ret
|
|
|
|
; set_rflags(uint64_t rflags)
|
|
set_rflags:
|
|
push rdi
|
|
popfq
|
|
ret
|
|
|
|
; void _ltr(uint16_t tss_selector)
|
|
_ltr:
|
|
ltr di
|
|
ret
|
|
|
|
; uint8_t inb(port)
|
|
inb:
|
|
push rdx
|
|
mov rdx, rdi
|
|
xor rax, rax
|
|
|
|
in al, dx
|
|
|
|
pop rdx
|
|
ret
|
|
|
|
|
|
; read_msr(uint32_t addr)
|
|
read_msr:
|
|
push rbp
|
|
mov rbp, rsp
|
|
|
|
push rcx
|
|
push rdx
|
|
|
|
mov ecx, edi
|
|
rdmsr
|
|
|
|
shl rdx, 32
|
|
or rax, rdx
|
|
|
|
pop rcx
|
|
pop rdx
|
|
|
|
mov rsp, rbp
|
|
pop rbp
|
|
ret
|
|
|
|
|
|
; write_msr(uint32_t addr, uint64_t value)
|
|
write_msr:
|
|
push rbp
|
|
mov rbp, rsp
|
|
|
|
push rcx
|
|
push rdx
|
|
|
|
mov ecx, edi
|
|
mov eax, esi
|
|
mov rdx, rsi
|
|
shr rdx, 32
|
|
|
|
wrmsr
|
|
|
|
pop rcx
|
|
pop rdx
|
|
|
|
mov rsp, rbp
|
|
pop rbp
|
|
ret
|