C
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
ELF parçasını eşle
- ELF başlığı
- Dosya türü
- Bölüm tablosu
- Bağlayıcı
- Program tablosu
- Yükleyici
- Sihirli sayı
- 0x7f E L F
-
ELF neyin kısaltmasıdır?
- Executable Link Format
- Extended Link File
- Executable and Linkable Format
- External Library Format
Cevabı göster
Executable and Linkable Format — ELF: Executable and Linkable Format.
-
ELF sihirli sayısını tamamla
unsigned char elf_magic[] = { 0x7f, 'E', 'L', '____' };
Cevabı göster
unsigned char elf_magic[] = { 0x7f, 'E', 'L', 'F' };
Sıradaki ders: Özet - Bağlayıcı