Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: iksnagreb am 19. October 2012, 22:19
-
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 (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);
}
-
Meine erste Vermutung wäre, dass der Stack nicht richtig eingerichtet ist.
-
Wie erkenne ich, ob der Stack nicht richtig eingerichtet ist? Ich habe es so wie in OS-Dev für Einsteiger gemacht.