Bir C Kodunun Çalıstırılabilir Dosya Haline Gelme Süreci

10:36


Yazdığımız bir C kodunun çalıştırılabilir dosya haline gelirken arka planda hangi aşamalardan geçtiğini öğrenmek hem bakış açımızı hem de programlama bilgisini genişletecektir. gcc derleyicileri önce preprocessor'ü devreye sokar ardından compiler devreye girer ve ardından linker devreye girer ve çalıştırılabilir dosyamız elde edilmiş olur. Bu arada yazdığımız programın assembly karşılığını gcc bize üretmektedir.



 Yazdığımız program basit bir "Hello World" programı ve şimdi bu hello.c programının üzerinden çalışmaya başlayalım;





  • .c dosyaları kaynak kod dosyaları
  • .i dosyaları ön işlemci çıktısının ardından oluşturulan dosya
  • .o dosyaları compiler ardından oluşan object file dosyası
  • main ise linkerin ardından oluşan çalıştırılabilir dosya


Pre-processing

Kısaca ön işlemci # (diyez) ile başlayan ifadeler üzerinde değişiklik yapan programdır. Ön işlemci kaynak kod üzerinde değişiklik yapan bir süreçtir. 


gcc -E main.c dediğimizde ön işlemci çalışır ve çıktıyı ekrana basar. Ben bu çıktıyı prepro.c' ye yönlendirdim. Şimdi vim ile bu dosyanın içeriğine bakalım;


Yukarıda ve aşağıda görüleceği üzere kaynak kodda linker için gerekli düzenlemeler yapılmış include' ların tam yol adresleri girilmiştir.


Compilation


Compilation yada compiler aşaması ise derleyici kaynak kodu link işlemleri dışında object dosyaya dönüştürme işlemlerine gerçekleştirdiği aşamadır. Derleme işlemi bittikten sonra linker' a gönderilir ve linker'dan sonra çalıştırılabilir makine koduna tamamiyle dönüştürülmüş olur.


Linking
Linker işleminin artından artık çalıştırılabilir kodlar üretilmiş olmaktadır.




Ext: Assembly

.s isimli dosya assembly dosyası ve assembly üzerinde inceleme yapmak dosya açılıp incelenebilir.




gcc assembly çıktısı intel veya AT&T veya INTEL syntax'ına göre çıkartılabilir. Örnek kullanım aşağıdaki gibidir:

gcc main.c -S -masm=att -o asm.s
gcc main.c -S -masm=intel -o asm.s