2011-11-28 17 views
7

x86 mimarisinde gcc ile bir dosya formatı nasıl oluştururum?gc ile bir dosya biçimi oluşturuluyor

nasm ile ben, örneğin -f bayrağıyla kolayca yapabilirsiniz: linux üzerinde

[[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]]$ 

, dosyaları .c derleme bir elf nesneyi üretir. Gcc ile nasıl bir dosya üretebilirim?

+0

Hangi sistemi kullanıyorsunuz? Linux'un artık yürütülebilir dosyaları desteklediğini sanmıyorum. Ara nesne dosyaları hakkında bilmiyorum. –

+0

Çekirdeğin bir destekle yapılandırılabileceğine inanıyorum, ancak varsayılan olarak kapalı. Bir çekirdeği derlediğimden beri bir süre geçti, bu artık geçerli olmayabilir. – goldfire

+0

Linux, CONFIG_BINFMT_AOUT'un derleme zamanında etkinleştirilmesi durumunda destekliyor. –

cevap

11

gcc ile a.out biçimini oluşturmak için, bağlantınızın bunu yapması gerekir. -Wl bayrağı sayesinde gcc'den bayraklar geçerek bunu yapabilirsiniz.

objdump -i 
+0

sorunu, elf biçiminde olan birçok nesne dosyası (.o) var, bu yüzden onları linker betiğinde OUTPUT_FORMAT (a.out-i386-linux) parametresi ile bağladığımda şu hatayı alıyorum: " a.out nesne dosya formatındaki ".comment" bölümünü temsil eder ". Bu yüzden başlangıçtan derlenmiş olan "gcc -c dosya.c" ye ve ELF'ye değil. – Nulik

+0

Yukarıdaki çözüme, -fno-ident option .comment bölümünün oluşturulmamış olduğunu buldum, a.out kernel'i gruba ince bir şekilde boot ettim. teşekkürler – Nulik

+0

Üzgünüz, ilk yorumunuzu kaçırdım ve düzeltmeyi kendinizin bulduğuna sevindim :) –

0

Bu sorunun iki yanıtı vardır. Birincisi, hedef olarak yepyeni bir GCC derlemeniz gerekecek; Bir komut satırı anahtarını çevirmek kadar kolay değil. Diğer cevap bir soru: neden buna gerçekten ihtiyacın var? Hemen geçerli bir sebep düşünemiyorum.

+1

Bir işletim sistemi geliştiriyorum ve tek bir görüntü dosyasında bir arada paketlenecek çekirdek ve uygulamalara ihtiyacım var, böylece bir okuma ve bir yazma (tüm görüntü) ile hızlı bir şekilde yüklendi, a.out bunun için ideal bir format olarak görünüyor, basit ve birçok bootloader tarafından destekleniyor. – Nulik

0

bu yazı http://gcc.gnu.org/ml/gcc-help/2006-04/msg00262.html

göre: yazarak Ayrıca desteklenen tüm biçimleri görüntüleyebilen

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

: Burada

Eğer a.out biçimi için ne yapacağını olduğunu

Farklı bir hedef için gcc oluşturmalısınız (i386-aout). Yıllarca (10+) kabul edilmediğinden makul olan sesler.