Cargando elf-i386 desde mi cargador de arranque

Estoy haciendo el proyecto del sistema operativo, hasta ahora tengo mi gestor de arranque en ejecución. Puedo cargar un archivo binario utilizando la interceptación de BIOS, pero no puedo cargar y llamar la función C desde el formato de archivo ELF

Aquí está mi progtwig de C que quiero ejecutar finalmente:

//build :: cc -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -c -o kmain.o kmain.c void kmain(){ int a = 5; for(;;); } 

Aquí está el código de ensamblaje para llamar a kmain ()

 ; build :: nasm -f elf loader.asm [BITS 32] [GLOBAL start] [EXTERN kmain] section .text start: mov eax, 0 call kmain 

Este es mi script de enlace

 ENTRY(start) 

Y así es como estoy uniendo todo.

 ld -m elf_i386 -T link.ld -o kernel loader.o kmain.o 

Ahora para llamar a start desde mi gestor de arranque, estoy usando el campo offset e_entry del encabezado elf (a 24 bytes de la dirección de inicio):

 xor edx, edx mov edx, 24 add edx, IMAGE_PMODE_BASE add ebx, dword[edx] add ebx, IMAGE_PMODE_BASE call ebx 

donde IMAGE_PMODE_BASE es la dirección del archivo elf cargado en la memoria. Mi pregunta es “¿Es esta la forma correcta de cargar y llamar una función en C en formato de archivo ELF?”.

Gracias por leer, por favor ayuda.

    Intereting Posts