10 Ağustos 2016 Çarşamba

eXecutable formuna dönüş

işletim sistemi linux,compilerımız gnu compiler.


bu aşamaları  örnek üzerinden açıklayalım.

print.c adında bir dosyamız olsun ve bunu içeriği şu şekilde olsun :

#include <stdio.h>
#define name "kernsteinist"
#define  number 10

void main(void)
{

int j;

for(j=0;j<number;j++)            // for girişi
 printf("Hello " name "\n");    /* print baskısı */

}





1.aşama preprocessing :

bu aşama preprocessing aşaması kısacası bu aşamada #include edilecek olan headerlar bu dosyanın(print.i) içine gömülür,macrolar açılır ve açıklamalar ortadan kaldırılır.

gnu compiler ile  dosyamızı şu şekilde  derlediğimizde bu aşamalara ilişkin dosyalarıda elde etmiş oluruz :

gcc -save-temps print.c -o print

print , print.i , print.o ,print.s dosyalarını elde etmiş oluruz.

print.i dosyasını incelediğimizde şunları görürürüz.macrolar açılmış ve açıklamalar ortadan kaldırılmış.

void main(void)
{

int j;

for(j=0;j<10;j++)
 printf("Hello " "kernsteinist" "\n");

}

yukarıda gördüğümüz gibi ve ayrıca #include <stdio.h> içindeki fonksiyonlar extern ifadesi ile dosyamıza bağlanmış.aslında bu bir deklaredir,functionların başındaki extern ifadesi fonksiyonun harici bir yerden çağrılacağını ifade eder.

örnek olarak kullanmış olduğumuz printf fonksiyonu dosyamızın içerisine şu şekilde gömülmüş.

extern int printf (const char *__restrict __format, ...);


ve yine name,number makrolarının açıldığını görmekteyiz.


2.aşama compilation:

bu aşamada ise giriş olarak print.i dosyası alınır ve print.s(assembler source) dosyası çıktı olarak verilir.
print.s dosyası c kodlarının assembly komutlarına karşılık düşürülmesidir.



3.aşama assembly :

bu aşamada print.s dosyası alınır ve bu dosyadan object file üretiriz..bu dosyanın içerisinde makine kodları bulunmaktadır.

örnek makine kodu :



yaptığı iş 1234 ve 4321 sayılarını toplamak.

object code(amaç kod) olarak ifade edilir kendileri.


4.aşama linking :

son aşamada ise  elimizde birden fazla object dosyası olabilir bunların bazıları relocatable file tıpkı bizim bu ürettiğimiz gibi(print.o) kimiside shared object file olabilir ve bunların  birleştirilmesiyle(eğer başka object dosyalara ihtiyaç varsa) ELF eXecutable file elde etmiş oluruz.

artık bu file executable yani OS(Operating System) tarafından icra edilebilir,çalıştırılabilir.


EOF

Hiç yorum yok:

Yorum Gönder