Visual Studio - Wie Pure-Binarys (also kein PE-Format) erzeugen?



  • Tagchen,
    ich wollte mal Fragen, ob es mit Visual Studio irgendwie möglich ist, reine Binärdateien (also nicht im PE-Format) zu erzeugen. Darf ruhig ein externer Linker sein, der sich aber wenn möglich irgendwie integrieren lassen sollte (z.B. im Post-Build-Event). Ach ja, er sollte wenn möglich auch LD-Like Linkerskripte unterstützen.



  • Reine Neugier, aber wozu?



  • OS-Development. Dafür wird zwar in der Regel der GCC verwendet, aber 1. komm ich nich mit der Inline-ASM-Syntax zurecht und 2. arbeite ich lieber mit einem Compiler den ich in- und auswendig kenn (es hat mich z.B. 2 Wochen gebraucht herauszunfinden, dass der GCC meine Struktur für die IDT "optimiert", also auf ein bestimmtes Alingment gebracht hat, was dem Prozessor natürlich nicht gefiel).



  • Jonas OSDever schrieb:

    OS-Development. Dafür wird zwar in der Regel der GCC verwendet, aber 1. komm ich nich mit der Inline-ASM-Syntax zurecht und 2. arbeite ich lieber mit einem Compiler den ich in- und auswendig kenn (es hat mich z.B. 2 Wochen gebraucht herauszunfinden, dass der GCC meine Struktur für die IDT "optimiert", also auf ein bestimmtes Alingment gebracht hat, was dem Prozessor natürlich nicht gefiel).

    Dafür gibts __attribute__((packed)) beim GCC. Das entsprechend #pragma push(pack) (?) sollte man aber beim MSVC auch nicht weglassen.

    http://wiki.osdev.org/Visual_Studio



  • Ich hab das mit dem __attribute-Zeug später auch rausgefunden. Beim MSVC hätt ichs einfach in den Einstellungen gemacht oder aber mit #pragma. Trotzdem find ich VS besser zu bedienen. Den Link schau ich mal durch.



  • Mmh, diesen Wiki-Eintrag hab ich schonmal gelesen. Ist aber nicht ganz das was ich brauche. Hier wird ja nur gezeigt, wie man VS konfiguiern muss um die PE-Datei für GRUB verträglich zu machen (durch die reloc-Section), nicht aber wie pure binaries erzeugt werden. Das mit dem Watcom-Linker muss ich mal noch angucken.



  • Was genau ist denn deiner Meinung nach eine "pure Binary" 😕



  • Kein PE-Header, keine markierten Sections. Eben der Maschinencode, den ein bestimmtes Programm erzeugen würde genau in einer Datei.
    Also:

    int Var = 0;
    Var = 90;
    

    wird zu

    Var dd 0
    mov Var, 90
    

    Der Aufruf der main usw. wird dadurch geregelt, dass ein Bootloader die Adresse vom Linker bekommt und diese Aufruft.



  • MSVC kann keine rohen Binaries erzeugen, außer Du nimmst Zusatzsoftware zur Hilfe.



  • Und welche Zusatzsoftware könnte ich zur Hilfe nehmen? LD is wie gesagt ganz schick, kommt aber nicht mit den MS-Obj-Format zurecht.



  • Jonas OSDever schrieb:

    Und welche Zusatzsoftware könnte ich zur Hilfe nehmen? LD is wie gesagt ganz schick, kommt aber nicht mit den MS-Obj-Format zurecht.

    Ich glaube, das steht in dem Artikel.



  • Sorry, hab das mit Watcoms WLink überlesen. Ich werd mal OpenWatcom besuchen und das Ding (hoffentlich erfolgreich) ausprobieren.


Anmelden zum Antworten