2011-11-28 27 views
7

Jak wygenerować format pliku a.out z gcc na architekturach x86?generowanie formatu pliku a.out z gcc

Z NASM mogę to zrobić z łatwością -f, na przykład:

[[email protected]]$ nasm -f aout start.asm 
[[email protected]]$ objdump -a start.o 

start.o:  file format a.out-i386-linux 
start.o 

[[email protected]]$ 

na Linuksie, kompilacji plików .c wytwarza elf obiekt. Jak mogę utworzyć pliki a.out z gcc?

+0

Jakiego systemu używasz? Nie sądzę, że Linux obsługuje już pliki wykonywalne a.out. Nie wiem o pośrednich plikach obiektów. –

+0

Wierzę, że jądro może być skonfigurowane z obsługą a.out, ale domyślnie jest wyłączone. Minęło trochę czasu, odkąd skompilowałem jądro, to może już nie być. – goldfire

+0

Linux obsługuje to, jeśli 'CONFIG_BINFMT_AOUT' jest włączone podczas kompilacji. –

Odpowiedz

11

Aby wygenerować format a.out za pomocą gcc, należy poinformować o tym linkera. Możesz to zrobić, przekazując flagi z gcc, dzięki flagę -Wl.

Oto, co można zrobić dla formatu a.out:

gcc -Wl,--oformat=a.out-i386-linux file.c -o file.out 

Można również wyświetlić wszystkie formaty obsługiwane przez wpisanie:

objdump -i 
+0

Problem polega na tym, że mam wiele plików obiektów (.o), które są w formacie elfa, więc gdy połączę je z parametrem OUTPUT_FORMAT (a.out-i386-linux) w skrypcie linkera, pojawia się następujący błąd: "nie można reprezentują sekcję ".comment" w formacie pliku obiektów a.out ". Dlatego potrzebuję, aby "gcc -c plik.c" został skompilowany od początku do formatu a.out, a nie ELF. – Nulik

+0

Znalazłem rozwiązanie powyższego, z opcją -fno-ident, sekcja .comment nie została wygenerowana, uruchomiłem moje jądro a.out fine z GRUBem. dzięki – Nulik

+0

Przepraszam, że przegapiłem twój pierwszy komentarz i cieszę się, że znalazłeś to samemu :) –

0

Istnieją dwie odpowiedzi na to pytanie. Jednym z nich jest to, że musisz skompilować świeże GCC z aout jako celem; nie jest to tak proste jak przerzucenie przełącznika wiersza poleceń. Drugą odpowiedzią jest pytanie: dlaczego tak naprawdę tego potrzebujesz? Nie mogę od razu wymyślić ważnego powodu.

+1

Pracuję nad systemem operacyjnym i potrzebuję, aby jądro i aplikacje były spakowane razem w jednym pliku obrazu, aby był szybko ładowany jednym czytaniem i jednym zapisaniem (cały obraz), a.out wygląda na idealny do tego, jest prosty i obsługiwany przez wiele programów rozruchowych. – Nulik

Powiązane problemy