Von C nach Assambler?
-
Hy,
Wenn ich ein C Prog schreibe wie z.B.:
#include "stdio.h" int main() { printf("Das ist ein Test!"); return 0; };
und dieses dann mit gcc und der Option -S in Assamblercode umwandle bekomme ich
folgenden Code:.file "cmd.c" .section .text LC0: .ascii "OP CMD Line!\12\0" .globl _main _main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax subl %eax, %esp subl $12, %esp pushl $LC0 call _printf addl $16, %esp movl $0, %eax leave ret .ident "GCC: (GNU) 3.3.2"
Nur wie kann ich diesen Code mit nasm umwandeln sodas ich diese dann in meinen Kernel benutzen kann.
Oder ist dies generell nicht möglich?
Der Compiler müsste doch auch die Funktionen der Headerdatei mit umwandeln.MFG
RS
-
NASM nutzt ja auch Intel Syntax. Ob du den auf AT&T Syntax stellen kannst weiß ich leider nicht, da ich nur den von Intel verwende.
Im GAS sollte der Code allerdings einwandfrei laufen.
-
Erstmal danke für die Antwort.
Aber was ist AT&T und GAS?
Und wie kann ich von C in ASM umwandeln?MFG
RS
-
ReneS schrieb:
Aber was ist AT&T
Eine Firma. Und die hat vor langer Zeit einen Assembler geschrieben. Und dieser Assembler hatte eine andere Syntax, als die die von Intel verwendet wird.
gcc -S spuckt AT&T-Syntax aus.
und GAS?
Der Gnu-ASsembler. Frisst AT&T-Syntax.
Und wie kann ich von C in ASM umwandeln?
Das hast Du doch schon geschafft: gcc -S
-
Ja nein ähh ok.
Das dies ein Assambler code ist ist mir nun klar, aber wie kann ich diesen in eine Binäre datei umwandeln sodass ich diese in meinen Kernel einbauen kann?
Wenn ich diese Option (-S) benutze, wandelt er dann auch grundlegende Headerinformationen wie _printf um?Danke RS
-
Das Programm könnteste bestimmt net per Bootloader starten, da du ja eine Funktion aus der stdlib benutzt von C. Oder irre ich mich da?
-
Du hast recht die Funktion Printf wird leider nicht mit umgewandelt.
Der Assambler code der erzeugt wird ist nur unter Windows benutzbar.
Beispielsweise als Com Datei.
Die einzige möglichkeit die ich habe ist das Neuschreiben der Funktionen.
Mit dem OSKit komme ich unter Windows leider nicht zurecht.Danke
RS