CodeBlanks Logo Icon CodeBlanks

ELF format

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

main.c
#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

main.c
#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

Soru
unsigned char elf_magic[] = { 0x7f, 'E', 'L', '____' };
Cevap
unsigned char elf_magic[] = { 0x7f, 'E', 'L', 'F' };

Açıklama: ELF sihirli sayısı 0x7f, E, L, F ile biter.

Uzman bölümündeki tüm dersler