Ich möchte diesen Quellcode in Windows kompilieren (es ist nur ein Beispiel):
start:
NOP
NOP
Wenn ich es mit NASM oder FASM kompiliere, beträgt die Länge der Ausgabedatei 2 Bytes. Aber wenn ich es mit dem GNU Assembler (as) kompiliere, beträgt die Länge der Ausgabedatei 292 Bytes!
Wie kompiliere ich eine Assemblierdatei im Rohbinary-Format (wie DOS .com) mit dem GNU Assembler (as)?
Warum mache ich das?
Ich möchte mein eigenes einfaches Betriebssystem schreiben, ich schreibe meinen Code mit C (ohne Verwendung von C-Standardbibliotheken wie stdio.h oder math.h) und konvertiere ihn in Assembler:
gcc -S my_os.c -o my_os.asm -masm=intel
Dann kompiliere ich die Assemblierdatei in ein Rohbinary:
as my_os.asm
Dann benenne ich a.out
(Ausgabe des Assemblers) in my_os.flp
um und starte schließlich mein Betriebssystem mit VMWare :)
1 Stimmen
Vielleicht können Sie damit beginnen, Ihren eigenen Assembler zu schreiben :) Ich vermute, dass die "290" Bytes, auf die Sie sich beziehen, aus dem Dateikopf stammen: Jede binäre Objektdatei hat einen davon.
0 Stimmen
@paulsm4: Ja! 290 Bytes Header, aber ich möchte keine Kopfzeile!
0 Stimmen
@Amir - kannst du nicht einfach
objcopy
odersegedit
verwenden, um die Binärteile zu kopieren, die dir wichtig sind?1 Stimmen
@CiroSantilli996ICU: Sollte dies als Duplikat von Wie man einfache Binärdateien wie nasm -f bin mit dem GNU GAS Assembler generiert geschlossen werden?
0 Stimmen
@PeterCordes ja, das ist, was ich vor 5 Jahren in meinem vorherigen Kommentar gesagt habe :-)
0 Stimmen
@CiroSantilli996ICU: Ich habe gefragt, ob das noch immer korrekt ist, da du eine Antwort auf beide Fragen hast, die du seitdem aktualisiert hast.
0 Stimmen
@PeterCordes Ich brauche auch einen dieser Montage-Doppelhämmer XD
0 Stimmen
@CiroSantilli996ICU: Einige Ihrer Montageantworten scheinen unter einem 2. Konto zu sein. Das Zusammenführen könnte helfen.
0 Stimmen
@PeterCordes Es ist in Ordnung, ich brauche eine "politisch amoralische" Marionette aus bestimmten Gründen :-)