ELF format
- C kursu
- Uzman
- Ders 35/47
- 5 dk
ELF dosya formatını öğrenirsin.
ELF dosya biçimi
ELF (Executable and Linkable Format), Linux ve Unix sistemlerinde kullanılan standart dosya biçimidir. Nesne dosyaları (.o), çalıştırılabilirler ve paylaşılan kütüphaneler (.so) hep ELF biçimindedir.
Bir ELF dosyası üç ana parçadan oluşur: ELF başlığı (header) dosya türünü ve mimariyi söyler; bölüm başlık tablosu (section header table) bağlayıcının gördüğü bölümleri listeler; program başlık tablosu (program header table) yükleyicinin gördüğü bölümleri listeler. İlk dört bayt 0x7f, 'E', 'L', 'F' sihirli sayısıdır (magic). Bu biçim, bağlayıcı ve yükleyicinin ortak dilidir.
Bölümler ve segmentler
ELF dosyasında bölümler (sections) ve segmentler (segments) iki farklı görünümdür. Bağlayıcı bölümlerle çalışır: .text, .data, .bss gibi. Yükleyici segmentlerle çalışır: bir segment, birden fazla bölümü bir araya getirip belleğe yükler.
Örneğin, .text ve .rodata bölümleri aynı salt okunur segmente gidebilir; .data ve .bss aynı yazılabilir segmente gidebilir. Bu ayrım, dosya boyutunu küçültür ve bellek korumasını etkinleştirir: salt okunur segmentler yazmaya karşı korumalı, yazılabilir segmentler ise yürütülmeye karşı korumalıdır.
Uygulama ELF bölümlerini simüle et
int data_val = 42; tanımla (başlatılmış, .data'ya gider). int bss_val; tanımla (başlatılmamış, .bss'e gider). void show(void) fonksiyonu yaz; içinde printf("Kod: hazır\n") çağır (bu .text'e gider). int main(void) yaz; printf("Veri: %d\n", data_val), printf("BSS: %d\n", bss_val) ve show() çağır.
Başlangıç kodu
#include <stdio.h>
// başlatılmış genel değişken
// başlatılmamış genel değişken
// fonksiyon tanımla
// main'de üçünü de yazdırÖrnek çözüm
#include <stdio.h>
int data_val = 42;
int bss_val;
void show(void) {
printf("Kod: hazır\n");
}
int main(void) {
printf("Veri: %d\n", data_val);
printf("BSS: %d\n", bss_val);
show();
return 0;
}Beklenen çıktı
Veri: 42 BSS: 0 Kod: hazır
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 ELF parçasını eşle
| Kavram | Anlamı |
|---|---|
ELF başlığı |
Dosya türü |
Bölüm tablosu |
Bağlayıcı |
Program tablosu |
Yükleyici |
Sihirli sayı |
0x7f E L F |
2 ELF neyin kısaltmasıdır?
- Executable Link Format
- Extended Link File
- Executable and Linkable Format Doğru cevap
- External Library Format
Açıklama: ELF: Executable and Linkable Format.
3 ELF sihirli sayısını tamamla
unsigned char elf_magic[] = { 0x7f, 'E', 'L', '____' };
unsigned char elf_magic[] = { 0x7f, 'E', 'L', 'F' };
Açıklama: ELF sihirli sayısı 0x7f, E, L, F ile biter.