Ld Fehler File not recognized: File format not recognized

... komplette Frage anzeigen

1 Antwort

Der Linker (ld) kommt mit deiner Object-Datei nicht klar, weil es ein nicht unterstütztes Format ist.

D. h. der Fehler liegt bei NASM, mit dem du eine Object-Datei erzeugen musst, mit der ld auch klar kommt.

Guck dir mal mit folgendem Kommando die von NASM unterstützten Output Formate an:

nasm -hf

Bei mir kommen folgende Möglichkeiten dabei raus:

aout      Linux a.out object files
aoutb     NetBSD/FreeBSD a.out object files
coff      COFF (i386) object files (e.g. DJGPP for DOS)
elf32     ELF32 (i386) object files (e.g. Linux)
elf64     ELF64 (x86_64) object files (e.g. Linux)
elfx32    ELFX32 (x86_64) object files (e.g. Linux)
as86      Linux as86 (bin86 version 0.3) object files
obj       MS-DOS 16-bit/32-bit OMF object files
win32     Microsoft Win32 (i386) object files
win64     Microsoft Win64 (x86-64) object files
rdf       Relocatable Dynamic Object File Format v2.0
ieee      IEEE-695 (LADsoft variant) object file format
macho32   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
macho64   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files

Und da MinGW ja eigentlich auf dem GCC basiert, welcher von Linux kommt und m. W. n. auch NICHT mit dem Windows Objekt-Format (welches z. B. der MS Compiler erzeugt) kompatibel ist, probier einfach mal ein paar Möglichkeiten aus, die dir logisch erscheinen. (macho32 & Co sind natürlich unlogisch, und die kannst du auch gleich unter den Tisch fallen lassen)

NASM dann einfach mit ...

nasm -f XYZ

... aufrufen, wobei XYZ für das Output-Format steht.

Viel Erfolg! :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
06.02.2015, 21:43

PS: So wie es aussieht, willst du eine möglichst kleine EXE Datei erzeugen. Die wird aber selbst mit deiner Methode höchstwahrscheinlich nicht unter 4KB liegen. Allerdings ist dein eigentlicher Code natürlich sehr sehr schlank, weshalb du dir mal LordPE runterladen solltest, und damit die Einsprungadressse deiner EXE herunter setzen solltest. Dabei werden mehrere KB große Nullblöcke entfernt, und deine EXE hat am Ende nur noch ein paar hundert Byte! :)

0

Was möchtest Du wissen?