So, ich hätte da noch ein paar Fragen zu ELF-Dateien.
Ich hab ein kleines testprogramm in ASM geschrieben (ruft in einer Endlosschleife int 0x30 auf), assembliert und gelinkt. Rausgekommen ist eine ELF-Datei, die ich nun mit meinem Kernel ausführen möchte.
Daher unternimmt mein Kernel jetzt folgende Schritte:
ELF-Header prüfen
Program-Header-Einträge durchlaufen und alle PT_LOAD-Segmente in den virtuellen Speicher kopieren (der Bereich von p_offset bis p_offset+p_filesz wird kopiert)
Task erstellen, der e_entry als eip hat
Das ganze funktioniert aber noch nicht (eine ganze Weile tut sich einfach nix, irgendwann fliegt dann ein Page-Fault). Also hab ich ein bisschen herumprobiert und herausgefunden, das mein Programm gar keine PT_Load-Segmente hat. Alle anderen Segmente, die in der ELF-Datei existieren, haben als virtuelle Zieladresse 0. Wie soll jetzt aber der ausführbare Code im Speicher landen, wenn gar keine Segmente zum kopieren da sind?
Und für was ist eigentlich der Sektionsheader gut? Brauch ich den?
Btw Ich glaub ich schreib am besten gleich ein ganzes Buch über OS-dev. Ich werd nämlich auch zum Thema ELF-Dateien ein Tutorial schreiben, und wenn ich über jedes Thema ein Tutorial schreib, werden das ganz schön viele. Aber vorerst sind es nur ein paar, und da benutze ich erstmal das Lowlevel-Wiki um meine Tutorials anderen zugänglich zu machen.
An dieser Stelle muss ich jetzt einfach mal ein großes Lob an alle Leute von Lowlevel aussprechen. Ich bin erst seit August 2008 am OS-coden, und ohne eure Hilfe hätte ich schon längst aufgegeben.
Weiter so.