Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Programm Noob am 10. January 2010, 11:54

Titel: Module mit Grub laden und ausführen!
Beitrag von: Programm Noob am 10. January 2010, 11:54
Moin

Ich hab jetzt die halbe Nacht damit verbracht ein Modul mit Grub zu laden und auszuführen.

Damit sollte das Modul eigentlich ausgeführt werden.
start(boot_info->mi_mods_addr[1].start);

Der code von Start:
void start(int adresse)
{
asm volatile ("call %%eax" :: "a"(adresse));
}

Ich bekomme immer die Exception: Invalid Opcode!

Ich hoffe mir kann einer helfen.

Programm Noob
Titel: Re: Module mit Grub laden und ausführen!
Beitrag von: SHyx0rmZ am 10. January 2010, 12:16
Du musst das Modul natürlich vorher an die richtige Adresse verschieben, da es sonst versucht auf Adressen zuzugreifen, in denen alles beliebige drinstehen könnte, nur die Daten des Moduls nicht und natürlich auch die Sprungadressen dann falsch sind.
Titel: Re: Module mit Grub laden und ausführen!
Beitrag von: bluecode am 10. January 2010, 12:29
Außerdem muss die Funktion die ausgeführt werden soll dann auch wirklich am Anfang des Moduls liegen, sonst wird nicht die "main"-Funktion des Moduls ausgeführt.
Titel: Re: Module mit Grub laden und ausführen!
Beitrag von: kevin am 10. January 2010, 15:19
Wie sieht denn das Modul aus und wie wird es gebaut? Ein jmp $ als flache Binary assembliert sollte auch ohne irgendwas tun. Einen Test-Syscall kann man auf diese Weise vermutlich auch noch aufrufen. Aber wenn es mehr werden soll, muss ein ordentliches Binärformat her (z.B. ELF) und ein passender Loader dazu.