mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
WIP ring3
This commit is contained in:
@@ -150,3 +150,100 @@ irq_handler_prelude:
|
||||
|
||||
section .isrs
|
||||
%include "interrupt_isrs.inc"
|
||||
|
||||
extern syscall_handler
|
||||
syscall_handler_prelude:
|
||||
push 0 ; ss, doesn't matter here
|
||||
push rsp
|
||||
pushf
|
||||
push 0 ; cs, doesn't matter here
|
||||
push rcx ; user rip
|
||||
push 0 ; bogus interrupt
|
||||
push 0 ; bogus errorcode
|
||||
push_all_and_segments
|
||||
|
||||
call syscall_handler
|
||||
|
||||
pop_all_and_segments
|
||||
add rsp, 16 ; ignore bogus interrupt / error
|
||||
pop rcx ; user rip
|
||||
add rsp, 32 ; ignore cs, flags, rsp, ss
|
||||
|
||||
o64 sysret
|
||||
|
||||
global syscall_enable
|
||||
syscall_enable:
|
||||
; IA32_EFER - set bit 0, syscall enable
|
||||
mov rcx, 0xc0000080
|
||||
rdmsr
|
||||
or rax, 0x1
|
||||
wrmsr
|
||||
|
||||
; IA32_STAR - cs for syscall
|
||||
mov rcx, 0xc0000081
|
||||
mov rax, 0 ; not used
|
||||
mov rdx, 0x00180008 ; GDT:3 (user code), GDT:1 (kernel code)
|
||||
wrmsr
|
||||
|
||||
; IA32_LSTAR - RIP for syscall
|
||||
mov rcx, 0xc0000082
|
||||
lea rax, [rel syscall_handler_prelude]
|
||||
mov rdx, rax
|
||||
shr rdx, 32
|
||||
wrmsr
|
||||
|
||||
; IA32_FMASK - FLAGS mask inside syscall
|
||||
mov rcx, 0xc0000084
|
||||
mov rax, 0x200
|
||||
mov rdx, 0
|
||||
wrmsr
|
||||
|
||||
|
||||
ret
|
||||
|
||||
global taskA
|
||||
taskA:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
push 0x123456789abcdef0
|
||||
push 0x0fedcba987654321
|
||||
|
||||
.loop:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
syscall
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
jmp .loop
|
||||
|
||||
Reference in New Issue
Block a user