Autor Thema: Funktionen in Programm lösen Fehler aus  (Gelesen 4673 mal)

iksnagreb

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« 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.
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);
}

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. October 2012, 22:57 »
Meine erste Vermutung wäre, dass der Stack nicht richtig eingerichtet ist.
Dieser Text wird unter jedem Beitrag angezeigt.

iksnagreb

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 20. October 2012, 11:34 »
Wie erkenne ich, ob der Stack nicht richtig eingerichtet ist? Ich habe es so wie in OS-Dev für Einsteiger gemacht.

 

Einloggen