Hallo,
Ich versuche bei meinem Kernel gerade ein Programm als Modul durch Grub laden zu lassen.
Ich mach es etwa so wie in
http://www.lowlevel.eu/wiki/Teil_8_-_Ein_erstes_Programm.
Ich verwende für das Testprogramm noch eine flache Binaries.
Das Programm startet gut, auch der erste Syscall funktioiniert ganz gut, doch wenn ich in diesem Programm eine Funktion enthalten ist wird ein #GP ausgelöst.
Warum
So wird das Programm geladen:
struct mbs_mods *mod = mbs->mbs_mods_addr;
uintptr_t addr = mod->mod_start;
uintptr_t addr_end = mod->mod_end;
memcpy( (void*) 0x200000, (void*)addr, (addr_end - addr) );
init_task((void*)0x200000, 1);
Und so sieht das Programm aus:
#include "stdint.h"
void put_char(char chr)
{
asm( "int $0x30" : : "a" (0x001), "b" (chr) );
}
void _start(void)
{
put_char('A');
//asm( "int $0x30" : : "a" (0x001), "b" ('A') );
while(1);
}