wrote elf loader, finally fixed and doesn't hang
This commit is contained in:
parent
5017ac05f5
commit
44eea34051
|
|
@ -340,7 +340,7 @@ protected_mode:
|
||||||
mov fs, bx
|
mov fs, bx
|
||||||
pop eax
|
pop eax
|
||||||
mov esi, k_info
|
mov esi, k_info
|
||||||
jmp $
|
; jmp $
|
||||||
jmp eax
|
jmp eax
|
||||||
jmp $
|
jmp $
|
||||||
bits 16
|
bits 16
|
||||||
|
|
@ -691,8 +691,37 @@ load_elf:
|
||||||
cmp dword [esi], elf_magic
|
cmp dword [esi], elf_magic
|
||||||
jne .err
|
jne .err
|
||||||
|
|
||||||
|
xor ebx, ebx
|
||||||
|
mov ebx, [esi + 28]
|
||||||
|
lea ebx, [esi + ebx]
|
||||||
.map_seg_l:
|
.map_seg_l:
|
||||||
|
cmp dword [ebx], 0
|
||||||
|
je .exit
|
||||||
|
mov esi, [ebx + 8]
|
||||||
|
mov edi, [ebx + 4]
|
||||||
|
add edi, [ebp - 8]
|
||||||
|
mov ecx, [ebx + 24]
|
||||||
|
cmp ecx, 0
|
||||||
|
je .map_next
|
||||||
|
xor edx, edx
|
||||||
|
shr ecx, 12
|
||||||
|
.mloop:
|
||||||
|
call map_addr
|
||||||
|
add edi, 0x1000
|
||||||
|
add esi, 0x1000
|
||||||
|
; jmp $
|
||||||
|
inc edx
|
||||||
|
cmp edx, ecx
|
||||||
|
jb .mloop
|
||||||
|
.map_next:
|
||||||
|
add ebx, 32
|
||||||
|
jmp .map_seg_l
|
||||||
|
.exit:
|
||||||
|
; jmp $
|
||||||
|
mov esi, [ebp - 8]
|
||||||
|
mov eax, [esi + 24]; entry address
|
||||||
|
; debug
|
||||||
|
add esp, 64
|
||||||
pop ebp
|
pop ebp
|
||||||
ret
|
ret
|
||||||
jmp $
|
jmp $
|
||||||
|
|
@ -710,6 +739,8 @@ map_addr:
|
||||||
mov ebp, esp
|
mov ebp, esp
|
||||||
mov [ebp - 8], edi
|
mov [ebp - 8], edi
|
||||||
mov [ebp - 12], esi
|
mov [ebp - 12], esi
|
||||||
|
push edi
|
||||||
|
push esi
|
||||||
|
|
||||||
shr esi, 22
|
shr esi, 22
|
||||||
lea esi, [page_table + esi * 4]
|
lea esi, [page_table + esi * 4]
|
||||||
|
|
@ -732,6 +763,8 @@ map_addr:
|
||||||
lea esi, [esi + eax * 4]
|
lea esi, [esi + eax * 4]
|
||||||
mov [esi], edi
|
mov [esi], edi
|
||||||
or byte [esi], 1
|
or byte [esi], 1
|
||||||
|
pop esi
|
||||||
|
pop edi
|
||||||
pop ebp
|
pop ebp
|
||||||
ret
|
ret
|
||||||
jmp $
|
jmp $
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
bits 32
|
bits 32
|
||||||
|
|
||||||
; extern kmain
|
extern kmain
|
||||||
section .text
|
section .text
|
||||||
global _start
|
global _start
|
||||||
_start:
|
_start:
|
||||||
mov ebx, 0xb8002
|
mov ebx, 0xb8002
|
||||||
mov word [ebx], 0xf41
|
mov word [ebx], 0xf41
|
||||||
; call kmain
|
call kmain
|
||||||
jmp $
|
jmp $
|
||||||
|
|
||||||
section .data
|
section .data
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue