Hi,
hier nochmal mein Problem: Ich lade einen ELF-File als Modul mit Hilfe von Grub und hole mir dann die Adresse von einer Funktion. Die Adresse scheint auch zu stimmen, weil sie nur ein paar Bytes hinter dem Anfang des Moduls liegt. Wenn ich dann aber die Funktion aufrufen will, bleibt der Kernel hängen. Der Code hinter dem Funktionsaufruf wird also nicht mehr ausgeführt und manchmal scheint QEMU komplett abzustürzen. Hier ist etwas Code:
typedef unsigned long(*hal_getmoduleinformation)(char *sPlatform);
ELF32_Sym *elfsym;
elfsym = flexElfGetSymbolByName(elfhdr, "flexHAL_GetModuleInformation")))
{
hal_getmoduleinformation hal_getinfo;
hal_getinfo = (void*)(flexElfGetSymbolAddress(elfhdr, *flexHAL_GetModuleInformation"));
if(hal_getinfo(platform) != MODULE_MAGIC_NUMBER)
{
....
}
In der if(...) Zeile wird die Funktion also aufgerufen.
Ich könnte mir auch noch vorstellen dass der Fehler beim Compilieren vom Modul liegt:
gcc -ffreestanding -fwritable-strings -nostdinc -Wall -I . -c *.c
ld -m elf_i386 -Map ../../bin/hali386.map -o ../../bin/hali386.sys *.o
Falls jemand noch mehr Informationen braucht, muss er einfach nur fragen
Danke schonmal für jede Hilfe