C-Programme zu Binary-Code

Hallo zusammen,

ich möchte gerne C-Programme für ein eigenes Betriebssystem schreiben. Das Programm muss aber in reinen x86-Assemblercode umgewandelt werden, ohne irgendwelche Bibliotheken in der Umgebung.
Dazu brauche ich dann natürlich einen Compiler, der mir genau das Binary-Format des x86-Assemblers ausspuckt. Kann ich dazu den ganz normalen GCC-Compiler benutzen? Und wo finde ich ein Makefile für diesen Zweck?

Ist es dann überhaupt möglich, Methoden wie printf() zu benutzen, wenn man die iostream.h einbindet, also wird sich dann um alles gekümmert?

Danke im voraus,
Dawamaha

Wenn du Bibliotheken statisch linkst, sind alle genutzten Funktionen in der/den resultierenden Binärdatei(en) enthalten.

Howdy,

ich möchte gerne C-Programme für ein eigenes Betriebssystem
schreiben. Das Programm muss aber in reinen x86-Assemblercode
umgewandelt werden, ohne irgendwelche Bibliotheken in der
Umgebung.

Also bei C „gcc -S,“; damit erhaelst du Assembler Output.
Jegliche Aufrufe von Funktionen aus C Libs werden natuerlich nicht expandiert, d.h. wenn du printf benutzt wird da auch ein Assembler Call auf die Adresse von printf generiert.

Das bedeutet, dass, wenn du den Output in einem eigenen Betriebssystem benutzen willst, wahrscheinlich selbst eine libc implementieren muesstest.

den ganz normalen GCC-Compiler benutzen? Und wo finde ich ein
Makefile für diesen Zweck?

Da gibt es kein Standard Makefile, aber sowas wie

.c.s:
$(CC) -S $

Danke erstmal für die Antwort.

Es gibt kein iostream.h in C !

Sorry, ich meinte die stdio.h

Es ist mir aber immernoch nicht klar, dass wenn ich jetzt folgenden Code habe:

#include
void main()
{
printf(„Hello, world!“);
return 0;
}

Und ich diesen Code mit besagter Methode kompiliere, ist dann die Methode printf(), die dann den string ins video memory schreibt, in der erzeugten Binary drin?

Hallo Dawamaha !

Wie Adnan Vatandas unten bereits antwortete: wenn du die Bibliotheken statisch linkst (Option ‚-static‘ bei gcc) sind diese Funktionen im erzeugten Binary enthalten.

mfg
Christof

Howdy,

Wie Adnan Vatandas unten bereits antwortete: wenn du die
Bibliotheken statisch linkst (Option ‚-static‘ bei gcc) sind
diese Funktionen im erzeugten Binary enthalten.

nein, nein, nein. Der Ursprungsposter wollte

„ich möchte gerne C-Programme für ein eigenes Betriebssystem schreiben“

Da hilft statisches Linken nicht so recht. Das führt zwar dazu, dass die libs in dem erzeugten Code drinnen sind, aber nicht dazu, dass er das Ganze auf seinem „eigenen“ Betriebssystem ausführen kann oder dass es dort auch nur ansatzweise lauffähig ist.

Bevor wir hier aber weiter philosophieren, sollte vielleicht der UP noch einmal genau erklaeren, was er denn möchte.

Gruss
norsemanna

Hallo,

ich möchte gerne C-Programme für ein eigenes Betriebssystem
schreiben. Das Programm muss aber in reinen x86-Assemblercode
umgewandelt werden, ohne irgendwelche Bibliotheken in der
Umgebung.

Ist es dann überhaupt möglich, Methoden wie printf() zu
benutzen, wenn man die iostream.h einbindet, also wird sich
dann um alles gekümmert?

Hat dein eigenes Betriebssystem eine iostream.h oder stdio.h? Wenn nicht, geht das natuerlich nicht.

Gruesse,
Moritz