Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern PML4;
- extern PDPT;
- extern PD;
- extern PT;
- [BITS 32]
- global mb2_entry;
- section .text
- align 4
- GDT64:
- .Null: equ $ - GDT64
- dw 0
- dw 0
- db 0
- db 0
- db 0
- db 0
- .Code: equ $ - GDT64
- dw 0
- dw 0
- db 0
- db 10011000b
- db 00100000b
- db 0
- .Data: equ $ - GDT64
- dw 0
- dw 0
- db 0
- db 10010000b
- db 00000000b
- db 0
- .Pointer:
- dw $ - GDT64 - 1
- dq GDT64
- STACKSIZE equ 0x1000
- mb2_entry:
- mov esp, stack + STACKSIZE
- push eax
- push ebx
- ; set up page table
- mov edi, PML4
- mov cr3, edi
- xor eax, eax
- mov ecx, 4096
- rep stosd
- mov edi, cr3
- mov DWORD [edi], PDPT + 3
- mov edi, PDPT
- mov DWORD [edi], PD + 3
- mov edi, PD
- mov DWORD [edi], PT + 3
- mov edi, PT
- mov ebx, 0x00000003
- mov ecx, 512
- .SetEntry:
- mov DWORD [edi], ebx
- add ebx, 0x1000
- add edi, 8
- loop .SetEntry
- mov eax, cr4
- or eax, 1 << 5
- mov cr4, eax
- mov ecx, 0xC0000080
- rdmsr
- or eax, 1 << 8
- wrmsr
- mov eax, cr0
- or eax, 1 << 31
- mov cr0, eax
- pop ebx
- pop eax
- lgdt [GDT64.Pointer]
- jmp GDT64.Code:Realm64
- hang:
- hlt
- jmp hang
- section .text
- [BITS 64]
- extern mb2_entry64;
- Realm64:
- cli
- mov rdx, rax
- mov rcx, rbx
- mov ax, GDT64.Data
- mov ds, ax
- mov es, ax
- mov fs, ax
- mov gs, ax
- call mb2_entry64
- section .bss
- align 4
- stack: resb STACKSIZE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement