Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extern PML4;
  2. extern PDPT;
  3. extern PD;
  4. extern PT;
  5.  
  6. [BITS 32]
  7.  
  8. global mb2_entry;
  9.  
  10. section .text
  11. align 4
  12.  
  13. GDT64:                          
  14.     .Null: equ $ - GDT64        
  15.     dw 0                        
  16.     dw 0                        
  17.     db 0                        
  18.     db 0                        
  19.     db 0                        
  20.     db 0                        
  21.     .Code: equ $ - GDT64        
  22.     dw 0                        
  23.     dw 0                        
  24.     db 0                        
  25.     db 10011000b                
  26.     db 00100000b                
  27.     db 0                        
  28.     .Data: equ $ - GDT64        
  29.     dw 0                        
  30.     dw 0                        
  31.     db 0                        
  32.     db 10010000b                
  33.     db 00000000b                
  34.     db 0                        
  35.     .Pointer:                    
  36.     dw $ - GDT64 - 1            
  37.     dq GDT64                    
  38.  
  39. STACKSIZE   equ 0x1000
  40.  
  41. mb2_entry:
  42.     mov esp, stack + STACKSIZE   
  43.     push eax                     
  44.     push ebx                     
  45.  
  46.     ; set up page table
  47.     mov edi, PML4                
  48.     mov cr3, edi                 
  49.     xor eax, eax                 
  50.     mov ecx, 4096                
  51.     rep stosd                    
  52.                                  
  53.     mov edi, cr3                 
  54.    
  55.     mov DWORD [edi], PDPT + 3    
  56.     mov edi, PDPT
  57.     mov DWORD [edi], PD + 3      
  58.     mov edi, PD
  59.     mov DWORD [edi], PT + 3      
  60.     mov edi, PT
  61.    
  62.     mov ebx, 0x00000003          
  63.     mov ecx, 512                 
  64.    
  65. .SetEntry:
  66.     mov DWORD [edi], ebx         
  67.     add ebx, 0x1000
  68.     add edi, 8
  69.     loop .SetEntry
  70.    
  71.     mov eax, cr4                 
  72.     or eax, 1 << 5
  73.     mov cr4, eax
  74.    
  75.     mov ecx, 0xC0000080          
  76.     rdmsr
  77.     or eax, 1 << 8
  78.     wrmsr
  79.    
  80.     mov eax, cr0                 
  81.     or eax, 1 << 31
  82.     mov cr0, eax
  83.  
  84.     pop ebx                      
  85.     pop eax                      
  86.    
  87.     lgdt [GDT64.Pointer]         
  88.     jmp GDT64.Code:Realm64       
  89. hang:
  90.     hlt                          
  91.     jmp hang
  92.    
  93. section .text
  94.  
  95. [BITS 64]
  96.  
  97. extern mb2_entry64;
  98.  
  99. Realm64:
  100.     cli                          
  101.     mov rdx, rax                 
  102.     mov rcx, rbx                 
  103.     mov ax, GDT64.Data          
  104.     mov ds, ax                  
  105.     mov es, ax                  
  106.     mov fs, ax                  
  107.     mov gs, ax                  
  108.    
  109.     call mb2_entry64             
  110.  
  111. section .bss
  112. align 4
  113. stack: resb STACKSIZE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement