Add an example user space process
This commit is contained in:
+21
-14
@@ -224,30 +224,30 @@ jmp load_gdt
|
||||
|
||||
gdt_start:
|
||||
gdt_0: dq 0x0000000000000000
|
||||
gdt_1:
|
||||
gdt_32_code:
|
||||
.limit_low: dw 0xFFFF
|
||||
.base_low: dw 0x0000
|
||||
.base_middle: db 0x00
|
||||
.access: db 10011010b ; present, ring 0, code, executable, readable
|
||||
.flags: db 11001111b ; 32-bit, 4KB granularity
|
||||
.base_high: db 0x00
|
||||
gdt_1_end:
|
||||
gdt_2:
|
||||
gdt_32_code_end:
|
||||
gdt_64_code:
|
||||
.limit_low: dw 0xFFFF
|
||||
.base_low: dw 0x0000
|
||||
.base_middle: db 0x00
|
||||
.access: db 10011010b ; present, ring 0, code, executable, readable
|
||||
.access: db 10011010b ; present, ring 0, code, executable, readable
|
||||
.flags: db 10101111b ; long mode (L bit)
|
||||
.base_high: db 0x00
|
||||
gdt_2_end:
|
||||
gdt_3:
|
||||
gdt_64_code_end:
|
||||
gdt_data:
|
||||
.limit_low: dw 0xFFFF
|
||||
.base_low: dw 0x0000
|
||||
.base_middle: db 0x00
|
||||
.access: db 10010010b ; present, ring 0, data, writable
|
||||
.flags: db 00000000b
|
||||
.base_high: db 0x00
|
||||
gdt_3_end:
|
||||
gdt_data_end:
|
||||
gdt_end:
|
||||
|
||||
gdt_descriptor:
|
||||
@@ -276,23 +276,30 @@ protected_mode:
|
||||
mov ss, ax
|
||||
mov esp, 0x00090000
|
||||
|
||||
; zero page table memory at 0x00010000 (3 pages = 768 dwords)
|
||||
; zero page table memory
|
||||
mov edi, 0x00010000
|
||||
mov ecx, 768
|
||||
mov ecx, 256 * 5
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
|
||||
; PML4[0] -> PDPT at 0x00011000
|
||||
mov dword [0x00010000], 0x00011003
|
||||
; PDPT[0] -> PD at 0x00012000
|
||||
mov dword [0x00011000], 0x00012003
|
||||
; PML4[511] -> PDPT at 0x00012000
|
||||
mov dword [0x00010FF8], 0x00012003
|
||||
; PML4[0].PDPT[0] -> PD at 0x00013000
|
||||
mov dword [0x00011000], 0x00013003
|
||||
; PML4[511].PDPT[510] -> PD at 0x00014000
|
||||
mov dword [0x00012FF0], 0x00014003
|
||||
; PD: fill 64 entries, each mapping 2MB
|
||||
mov edi, 0x00012000
|
||||
mov edi, 0x00013000
|
||||
mov eax, 0x00000083 ; present, writable, huge page, base 0
|
||||
mov ecx, 64
|
||||
|
||||
.fill_pd:
|
||||
mov ebx, edi
|
||||
add ebx, 0x1000
|
||||
mov dword [edi], eax
|
||||
mov dword [ebx], eax
|
||||
add edi, 8
|
||||
add eax, 0x00200000 ; next 2MB
|
||||
loop .fill_pd
|
||||
@@ -327,11 +334,11 @@ long_mode:
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov ss, ax
|
||||
mov rsp, 0x0000000000090000
|
||||
mov rsp, 0xFFFFFFFF80090000
|
||||
|
||||
xor rax, rax
|
||||
xor rbx, rbx
|
||||
xor rcx, rcx
|
||||
xor rdx, rdx
|
||||
|
||||
jmp 0x00020000
|
||||
jmp 0xFFFFFFFF80020000
|
||||
|
||||
Reference in New Issue
Block a user