Autor Thema: Funktionen aus ELF File aufrufen?!?  (Gelesen 5092 mal)

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« am: 04. June 2006, 14:25 »
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

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #1 am: 04. June 2006, 20:43 »
haste denn die module ge-relocated? also, die richtigen addr in die module geschrieben?

maumo

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 05. June 2006, 13:34 »
Hm, nein noch nicht  :roll: Seh ich das richtig, dass das in diesen Schritten abläuft?
 o Section Header relocaten
 o .symtab relocaten
 o .data relocaten
 o .text relocaten
Und zum relocaten einer Section muss man durch alle Symbole loopen und die von Hand relocaten?

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #3 am: 05. June 2006, 14:19 »
jo^^ das wird das problem sein xD also ohne relocs springen die funktionen ja irgendwo hin,... das kann böse ausgehen

 

Einloggen