Diskussion:LF OS/LFX — Änderungen 8585 → 8586

Zeile 1: Zeile 1:
 
Ich hab mal ein paar Fragen zu Deinem Datei-Format:<br />31 Zeichen für einen Programm-Namen und 79 Zeichen für eine Programm-Beschreibung erscheinen mir etwas wenig, warum das nicht in einer String-Arrea o.ä. unterbringen wo die einzelnen Strings quasi unbegrenzt groß sein dürfen?<br />Wo ist der "normale" Entry-Point? (das scheint ein Standard-Fehler zu sein ;) den hab ich auch gemacht)<br />Es gibt offensichtlich keine Sectionen, wie trennst Du Code, Daten (.data und .bss), Relocations-Infos, Debug-Infos und all das andere Zeugs was man so braucht voneinander?<br />Mit welchen Programm sollen diese Dateien erzeugt werden? Von LD würde ich eher abraten, das Ding ist riesig, dem LD ein neues Datei-Format beizubringen dürfte ein X-faches an Zeit (X ist min 2-Stellig) kosten als einen recht komfortablen ELF-Loader selber zu schreiben (eigentlich reicht zusammenkopieren, gibt ja schließlich alles).<br />Versteh mich nicht falsch, ich will Dir nicht die Freude an einem eigenen Datei-Format verderben aber Du solltest Dir erst mal Gedanken über die gesamte Tool-Kette machen die dafür erforderlich ist. Wenn Du eh auf x86 bleiben möchtest gibt es IMHO nichts besseres als ELF. ELF ist '''das''' Executable-Format, auf allen Plattformen (von 8/16 Bit µC mal abgesehen) und unter allen Betriebssystemen (von Windows mal abgesehen). ELF ist hervorragend gut Dokumentiert, alle Aspekte sind gut durchdacht und es gibt Haufenweise Source-Code dafür. --[[Benutzer:Erik.vikinger|Erik.vikinger]] 17:11, 9. Okt. 2010 (CEST)
 
Ich hab mal ein paar Fragen zu Deinem Datei-Format:<br />31 Zeichen für einen Programm-Namen und 79 Zeichen für eine Programm-Beschreibung erscheinen mir etwas wenig, warum das nicht in einer String-Arrea o.ä. unterbringen wo die einzelnen Strings quasi unbegrenzt groß sein dürfen?<br />Wo ist der "normale" Entry-Point? (das scheint ein Standard-Fehler zu sein ;) den hab ich auch gemacht)<br />Es gibt offensichtlich keine Sectionen, wie trennst Du Code, Daten (.data und .bss), Relocations-Infos, Debug-Infos und all das andere Zeugs was man so braucht voneinander?<br />Mit welchen Programm sollen diese Dateien erzeugt werden? Von LD würde ich eher abraten, das Ding ist riesig, dem LD ein neues Datei-Format beizubringen dürfte ein X-faches an Zeit (X ist min 2-Stellig) kosten als einen recht komfortablen ELF-Loader selber zu schreiben (eigentlich reicht zusammenkopieren, gibt ja schließlich alles).<br />Versteh mich nicht falsch, ich will Dir nicht die Freude an einem eigenen Datei-Format verderben aber Du solltest Dir erst mal Gedanken über die gesamte Tool-Kette machen die dafür erforderlich ist. Wenn Du eh auf x86 bleiben möchtest gibt es IMHO nichts besseres als ELF. ELF ist '''das''' Executable-Format, auf allen Plattformen (von 8/16 Bit µC mal abgesehen) und unter allen Betriebssystemen (von Windows mal abgesehen). ELF ist hervorragend gut Dokumentiert, alle Aspekte sind gut durchdacht und es gibt Haufenweise Source-Code dafür. --[[Benutzer:Erik.vikinger|Erik.vikinger]] 17:11, 9. Okt. 2010 (CEST)
  
−
:: Als erstes: einen ELF Loader hab ich schon eingebaut, er funktioniert auch problemlos ;)
+
: Als erstes: einen ELF Loader hab ich schon eingebaut, er funktioniert auch problemlos ;)
−
:: braucht man die ganzen Sections eigentlich unbedingt? Ich dachte daran an den Header direkt den Maschinencode zu hängen, wo die Adressen innerhalb der Datei komplett aufgelöst sind. Dann würden sie doch eigentlich wegfallen, oder?
+
: braucht man die ganzen Sections eigentlich unbedingt? Ich dachte daran an den Header direkt den Maschinencode zu hängen, wo die Adressen innerhalb der Datei komplett aufgelöst sind. Dann würden sie doch eigentlich wegfallen, oder?
−
:: Zu den Strings: Mir war es erstmal wichtig überhaupt etwas direkt in der Datei speichern und einfach darauf zugreifen zu können. 31 Zeichen finde ich Eigentlich ausreichend, früher ging auch alles mit 8.3 Dateinamen, dass die Beschreibung etwas knapp werden könnte seh ich ein.
+
: Zu den Strings: Mir war es erstmal wichtig überhaupt etwas direkt in der Datei speichern und einfach darauf zugreifen zu können. 31 Zeichen finde ich Eigentlich ausreichend, früher ging auch alles mit 8.3 Dateinamen, dass die Beschreibung etwas knapp werden könnte seh ich ein.
−
:: Der normale Entry-Point ist direkt nach dem Dateiheader. Alles danach wird an die Ladeadresse kopiert und dann ausgeführt.
+
: Der normale Entry-Point ist direkt nach dem Dateiheader. Alles danach wird an die Ladeadresse kopiert und dann ausgeführt.
−
:: Relocations-Infos sollen dann später einen extra Header dranhängen, Debuginfos werden hintendrangehangen.
+
: Rolcations-Infos sollen dann später einen extra Header dranhängen, Debuginfos werden hintendrangehangen.
−
:: Momentan müssen die Dateien von Hand erzeugt werden, der Header kann von meinem Beispielprogramm erzeugt werden. Dann einfach den Maschinencode vom Assembler anhängen.
+
: Momentan müssen die Dateien von Hand erzeugt werden, der Header kann von meinem Beispielprogramm erzeugt werden. Dann einfach den Maschinencode vom Assembler anhängen.
−
:: Das müsste jetzt alles gewesen sein, wenn nicht, nochmal melden ;)
+
: Das müsste jetzt alles gewesen sein, wenn nicht, nochmal melden ;)
−
:: Trotzdem Danke das du es dir angeschaut hast --[[Benutzer:Littlefox|Littlefox]] 22:35, 9. Okt. 2010 (CEST)
+
: Trotzdem Danke das du es dir angeschaut hast --[[Benutzer:Littlefox|Littlefox]] 22:35, 9. Okt. 2010 (CEST)
 +
 
 +
:: Wenn Du schon einen ELF-Loader hast wozu dann noch einen weiteren Loader? Welches Ziel möchtest Du damit erreichen?<br />Die Sectionen wirst Du brauchen, spätestens wenn Du DWARF haben möchtest. Auch das trennen von Code und Daten ist extrem sinnvoll. Zusätzlich wäre es gut wenn 0-Daten (.bss) nicht zwangsläufig in der Executable mit drin sein müssen, es wäre also gut wenn das Layout im Speicher anders sein kann als das in der Datei.<br />Das der Entry-Point direkt am 0-ten Byte liegt musst Du dann aber beim linken garantieren können, da bin ich mir nicht sicher ob das zuverlässig unter allen Umständen geht.<br />Wenn ich Dich richtig verstanden habe machst Du mit diesem Header aus einer Plain-Binary eine simple Executable, ich bin mir nicht sicher ob das der richtige Weg ist. Für alles was ein Compiler erzeugt wird es IMHO so wie es jetzt ist wohl nicht reichen. Auch ohne Relocationen wirst Du IMHO nicht lange glücklich.<br />Das mit den Strings ist ne sehr gute Idee aber mit diesen Größenbeschränkungen wirst Du nicht viel Spaß haben, auch hier wären Sectionen gut. Da könnte man eine extra Section für nehmen und dort dann vielleicht noch sowas wie ein Icon o.ä. rein packen.<br />Ich lese mir sowas gern durch, für meine eigene Plattform muss ich auch ein eigenes Executable-Format entwickeln, ELF taugt da leider nicht. --[[Benutzer:Erik.vikinger|Erik.vikinger]] 00:12, 10. Okt. 2010 (CEST)
  
 
Du kannst ja den Beschreibungsstring ohne Nullterminierung machen, dann hättest du ein Byte mehr zur Verfügung. --[[Benutzer:Tev|Tev]] 22:39, 9. Okt. 2010 (CEST)
 
Du kannst ja den Beschreibungsstring ohne Nullterminierung machen, dann hättest du ein Byte mehr zur Verfügung. --[[Benutzer:Tev|Tev]] 22:39, 9. Okt. 2010 (CEST)
−
:: <ironie>Wow, ein Byte ;)</ironie> könnte man natürlich machen --[[Benutzer:Littlefox|Littlefox]] 22:46, 9. Okt. 2010 (CEST)
 
−
 
−
::: Das selbe kannst du auch dem Programmnamen machen, dann sind es sogar 2 Byte :P --[[Benutzer:Tev|Tev]] 22:52, 9. Okt. 2010 (CEST)
 
−
:::: Dann sind es aber keine C-Strings mehr, notfalls kann man ja die reservierten Bytes dazu nehmen (hab deine Antworten mal mit eingerückt)--[[Benutzer:Littlefox|Littlefox]] 22:55, 9. Okt. 2010 (CEST)
 
−
::::Es müssen ja keine C-Strings sein, dann muss halt der LFX Loader einfach das Nullbyte hinzufügen beim ausgeben, aber dafür ist es möglich einen längeren Namen und eine längere Beschreibung zu nutzen.--[[Benutzer:Tev|Tev]] 23:08, 9. Okt. 2010 (CEST)