Autor Thema: Module mit Grub laden und ausführen!  (Gelesen 4487 mal)

Programm Noob

  • Gast
Gespeichert
« 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

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #1 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.
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 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.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen