altrlabilir ve Balanabilir Biim (ELF / Executable and Linking Format)


indekiler :

Giri
1. kili Dosya ne demektir
1.1. Genel olarak kili Dosya Biimi yaplar
2. ELF kili Nesne Dosya
2.1. ELF Dosya eitleri
2.1.1. Dosya Biimi
2.1.2. Veri Gsterimi
2.1.3. Karakter Gsterimi
2.2. ELF Balk
2.2.1. ELF Dosyasnn Tannmas
2.3. Ksm'lar ve Ksm Balk Tablosu
2.3.1. zel tanmlanm Ksm'lar
2.4. String Tablosu
2.5. Sembol Tablosu
2.5.1. Sembol Deerleri
2.6. Yeniden Konumlandrma
3. Program Ykleme ve Dinamik Balama
3.1. Program Balk Tablosu ve Blm'ler
3.1.1. Not Ksm'
3.2. Program Ykleme lemi
3.3. Dinamik Balama
3.4. Rezerv edilmi simler
3.4.1. zel Ksm simleri
3.4.2. Dinamik Ksm simleri
3.4.3. Mevcut Uzantlar
Son Sz
Szlk
Kaynaklar

Giri

Bu belge UNIX ve trevi iletim sistemlerinde kullanlma oran en yksek olan kili Nesne Dosya biimi ELF hakknda olabildiince geni lde bilgi iermektedir. Belgenin yazlmasnda kaynaklar blmnde birinci ve ikinci srada olan "Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification" dkmanlarndan byk oranda yararlanlmtr, dolaysyla bu belge bir anlmanda onlarn evirisi niteliindedir.

1. kili Dosya ne demektir

Bilgisayar dnyasnda kullanlan balca iki tr dosya biimi vardr, ikili biim ve text biimdir (ASCII, EBCDIC,WISCII vs.). Text biimi insanlarn anlayabilecei trden veriler ieren dosyalardr. kili biim ise bilgisyarn anlayabilecei trden dolsyalardr. Bu biim genelde altrlabilir dosyalar ve saysal veri ieren dosyalarda kullanlr. Bazen ikili dosyalarda text biimde verilerde ierebilir. kili altrlabilir dosyalar bilgisayarlarn mikroilemcilerinin anlayabilecei trdendirler. lemciler bu trden dosyalar ilerindeki Ksm'lar ve bilgilere gre altrrlar. Baz altrlabilir ikili dosya biimleri unlardr : a.out, COFF, XCOFF (IBM AIX), ELF , PEF, Mach-O, CFM, LE (OS/2 *.exe), COM, MZ (Dos *.exe), NE (Win 3.xx *.exe), PE (Win 9x/NT *.exe).

1.1. Genel olarak kili Dosya Biimi yaplar

Bir ok ikili dosya biimi genelde u yapdadr: ilk ksmda dosyann iieriinin bir haritas olan balk, altrlabilir kodun bulunduu .text, programc tarafndan tanmlanm ve ilk deer verilmi statik mrl deikenlerin bulunduu .data ve ilk deer verilmemi deikenlerin sakland .bss ksm. Bu yap aadaki grafikte daha anlalr bir ekilde grlebilir.

2. ELF kili Nesne Dosya

ELF ikili dosya aslen USL (UNIX System Laboratories)'de ABI (Aplication Binary Interface)'in bir blm gibi gelitirilmi ve sunulmutur. TIS (The Tool Interface Standards) komitesi gelimi ELF'yi standart olarak 32 bit Intel ilemciler ailesinde ve eitli iletim sistemlerinde tanabilir nesne dosya biimi olarak semitir. Ama programclarn ELF'nin gcnden yararlanarak ikili arayz de daha ok dzenleme yapabilmeleri, dolays ile daha ayrodinamik programlar gelitirebilmeleridir.

ELF dier UNIX ikili dosya formatlarndan olan a.out (UNIX sistemleri tarafndan yllarca kullanlmtr ve hala destek verilmektedir fakat ou sistemde artk varsaylan dosya biimi deildir) ve COFF'a ( ELF'den nce kullanlan nesne dosya biimidir, SVR3'de kullanlmtr) gre daha gl ve daha esnektir. ELF biimi, programcya alma zaman srasnda programn akn kontrol altnna almasn salayan bir ok arala birletirilmitir. ELF dierlerine nazaran platformdan daha bamszdr. ELF biimi Solaris(2.x'den beri), SVR4 (SVR3, BSD4.3 , SunOS ve Microsoft XENIX system V'in zelliklerini tayan AT&T ve Sun Microsystems tarafndan duyurulan UNIX system V relase 4), SCO, UNIXware, Linux, BSD'ler ve bir ok UNIX'in gnmz de kulland Nesne kili Dosya Biimidir. Bu arada Microsoft NT de UNIX dnyasnn kullanmay brakt COFF dosya biimi tabann kullanarak gelitirdii kendi dosya biimine sahiptir.

2.1. ELF Dosya eitleri

ELF dosyalar kendi ararnda e ayrlrlar. Bunlar :
  1. altrlabilir dosya; tek bana albilmeye uygun bir programn kodlarn ierirler.
  2. Yeniden Konumlandrlabilir Nesne Dosya; bunlar yeni bir altrlabilir yada Paylaml Nesne Dosya oluturabilmek iin baka bir Yeniden Konumlandrlabilir Nesne Dosya yada Paylaml Nesne Dosya ile balanabilecek trden kod ve veri tarlar. (yani *.o lar)
  3. Paylaml Nesne Dosya; iki ayr balanma trne uygun kod ve veri ierirler. Birincisi balama program (rn; GNU ld program) bu tr bir dosyay Yeniden Konumlandrlabilir bir dosya ile ileme tabi tutarak yeni bir Nesne Dosya oluturur. kincisi dinamik balayc bu tr bir dosyay alma zaman esnasonda altrlabilir dosya ve baka Paylaml Nesneler ile birletirerek bir sre imaj oluturur. (yani *.so ve *.so.* dosyalar, rn; dinamik ktphaneler: FreeBSD'de ld-elf.so.1, Linux'da ld.so.1, libc.so.1 yada ld-linux.so.1)
Ayrca Core dosyalarda ayr bir tr olabilirler; bu tr dosyalar sre'ler altrlarken oluan her hangi bir hata durumunda bellein bir imajnn oluturulmasdrlar. Bu gurup dosyalar hata ayklama ilemlerinde kullanlmak zere hazrlanan rapor dosyalar olduklar iin, genelde aada sz edilicek konularla ilgileri yoktur.

2.1.1. Dosya Biimi

ELF'de bu farkl tr, farkl hizmetler sunsada i yaplar birbirlerine ok benzerdir. Bunlar kolaylk ve verimlilik iin ikiye ayrlrlar; birinci gurupdakiler derleyici, assembly yorumlaycs ve balayc programn rettii ve Ksm Balk Tablosunda tanmlanan mantksal Ksm'lar (Section) ieren dosyalar, dier gurpdakiler ise sistem ykleyicisi tarafndan ilenmi ve Program Balk Tablosunda tanmlanan Blm'leri (Segment) ierirler.

ELF Balk her iki trde de dosyann banda bulunur ve dosya ile iligli yaplacak ilemler iin bir yol haritas niteliindedir. Ksm'lar "Linking View" iin talimatlar (instructions), veri, sembol tablosu, yeniden konumlandrma bilgileri, vs. ierirler. Eer var ise Program Balk Tablosu sisteme nasl sre imaj oluturacan belirtir. Sre imaj oluturmak iin kullanlan dosyalarda bu tablo olmak zorundadr. Yeniden Konumlandrlabilir dosyalarda ise gerekli deildir. Ksm Balk Tablosu dosyada buluna ksmlarn tanmlanmas iin kullanlr. Btn Ksm'larn bu tabloda bir kayd vardr ve her giri Ksm'n ismi, boyutu vb. bilgiler tutar.

Aadaki grafiklerde; 2. ve 3. maddelerde geen Yeniden Konumlandrlabilir ve Paylaml Nesne Dosyalar "Linking View" ve "Linkable Sections" olarak, 1. maddede geen altrlabilir dosyalar ise "Execution View" ve "Executable Segmens" olarak gsterilmilerdir.


NOT: ekillerde Program Balk Tablosu ve ardndan Ksm veya Blmler ve ardndan da Ksm Balk Tablosu dzenli bir ekilde grnmekte ise de ELF Balnn dndaki hi bir eyin yeri kesinletirilmemidir.

2.1.2. Veri Gsterimi

ELF biimi 8 bit'ten oluan byte yapsndaki 32 yada 64 bit'lik bir ok farkl ilemci ailesine destek vermektedir, tabi bu durum daha byk yada kk sistemlere uyarlanabilir. Nesne Dosya'lar platformdan bamsz halede baz veriler ierirler, buda Nesne Dosya'lara kendilerini tanmlayabilme ve dolays ile ieriklerinin de kolayca yorumlanabilmesi olanan salar. Kalan veriler ise dosyann yaratld bilgisayara baklmakszn, hedef ilemcinin anlayabilecei trden encoding ilemine tabi tutulurlar.

Aadaki tablolarda ELF'nin 32 ve 64 bit'lik ilemciler iin tanmlanm veri tipleri listelenmektedir. Bu veri tipler platformdan bamszdr.

32-Bit Veri Tipleri
sim Uzunluk (Byte) Hizalama (Byte) Aklama
Elf32_Addr 4 4 Unsigned program address
Elf32_Off 4 4 Unsigned file offset
Elf32_Half 2 2 Unsigned medium integer
Elf32_Word 4 4 Unsigned integer
Elf32_Sword 4 4 Signed integer
unsigned char 1 1 Unsigned small integer

64-Bit Veri Tipleri
sim Uzunluk (Byte) Hizalama (Byte) Aklama
Elf64_Addr 8 8 Unsigned program address
Elf64_Off 8 8 Unsigned dosya offset
Elf64_Half 2 2 Unsigned medium integer
Elf64_Word 4 4 Unsigned integer
Elf64_Sword 4 4 Signed integer
Elf64_Xword 8 8 Unsigned long integer
Elf64_Sxword 8 8 Signed long integer
unsigned char 1 1 Unsigned small integer

Nesne dosya biiminin tanmlad btn veri yaplr, ilgili snf iin "doal" boyut ve hizalama deerlerine uyarlar. Gerektiinde, yapnn boyutunun 4'n katlar olabilmesi iin veri yaps 4-byte nesneler iin 4-byte hizalama yapar. Veri birde dosyann balarndan itibaren uygun hizalama yapabilir. Bylece rnein, Elf32_Addr yesini ieren bir yap dosya iersinde 4-byte'lk bir snr zerine hizalanacaktr. ELF tanabilirlik zelliini koruyabilmek iin "bit" birimi kullanmaz.

2.1.3. Karakter Gsterimi

Birok dosya biimi kontrol bilgilerini karakterler ile gsterir. Bu tek byte'lk karakterler 7-bit ASCII karakter set'ini kullanrlar. Baka bir deyile, ELF arabirimi '/' yada '\n' gibi karakter sabitlerinden kullanrsa, karakterlerin saysal deerleri 7-bit ASCII dzneninde olmaldrlar. Az nceki iki karakter sabiti iin tek byte'lk deerler, sras ile 47 ve 10 olacaktr.
0-127 aralnn dndaki karakter deerleri, karakter encoding'ine uygun olacak ekilde, bir yada daha fazla byte ikal edebilirler. Uygulamalar kendi karakter set'lerini farkl diller iin farkl karakter ilavelerini kullanarak kontrol edebilirler. TIS, karakter set'leri konusunda bir kstlama getirmesede, genel olarak aadaki maddelere uyulmaldr.

Bu uyarlar zellikle oklu dil destei olan uygulamalar ile ilgilidir.

NOT: ELF sabitleri iin, lemci trlerine gre tanmlanm bir isimlendirme biimi vardr. DT_, PT_ gibi isimler; ilemciye zel uzantlarn oluturulabilmesi iin lemcinin ismi ile birletirilirler: rnin DT_M32_SPECIAL. Ancak bu kurallara uymayan daha nceden varolan ilemci uzantlarda desetklenecektir. Mevcut bir uzantya rnek : DT_JMP_REL.

2.2. ELF Balk

Daha nceden de belirtilmiti, ELF Balk ksm her iki amata da dosyann ilk ksmndadr ve yeri sabitlenmi tek ksmdr, dier ksmlarn yerleri garantilenmi deildir. Balk her zaman ilk srada bulunur. Bu ksmn ierdii bilgilerden biri dosyann hangi trden (Yeniden Konumlandrlabilir, altrlabilir, paylaml, core) olduudur. ELF Balk ksm kili dosyann bir haritas gibidir, ve dier ksmlarn dosya iersindeki konum bilgileri bu ksmda tutulmaktadr. Pogramda altrlacak ilk bilgiyede buradan iaret edilmektedir. Bu ksmda "Linking View" tr dosyalar iin talimat, veri, Sembol Tablolar ve Yeniden Konumlandrlabilirlik bilgileri de tutulmaktadr.

Baz ikili Nesne Dosya'larn kontrol yap'lar beklenmedik bir ekilde genileyebilirlersede ELF Balk bu yaplarn gerek boyutlarnn ne olduunu tutmaktadr. Eer bu dosya deitirilmi ise program kendi kontrol yap'larn beklediinden fazla yada az bulacaktr. Bu durumda program fazla olan ksmlar grmezden gelecektir. Eksik olan bilgiler iin uygulanacak dzeltme ilemi dosyann ieriine baldr ve (bu konu ile ilgili) ilaveler tanmlandnda ve eer tanmlanrsa belirlenecektir.

ELF Balk Yaps
#define EI_NIDENT 16

typedef struct {   
  unsigned char e_ident[EI_NIDENT];
  Elf32_Half e_type;
  Elf32_Half e_machine;
  Elf32_Word e_version;
  Elf32_Addr e_entry;
  Elf32_Off e_phoff;
  Elf32_Off e_shoff;
  Elf32_Word e_flags;
  Elf32_Half e_ehsize;
  Elf32_Half e_phentsize;
  Elf32_Half e_phnum;
  Elf32_Half e_shentsize;
  Elf32_Half e_shnum;
  Elf32_Half e_shtrndx;
} Elf32_Ehdr;


typedef struct {
  unsigned char e_ident[EI_NIDENT];
  Elf64_Half e_type;
  Elf64_Half e_machine;
  Elf64_Word e_version;
  Elf64_Addr e_entry;
  Elf64_Off e_phoff;
  Elf64_Off e_shoff;
  Elf64_Word e_flags;
  Elf64_Half e_ehsize;
  Elf64_Half e_phentsize;
  Elf64_Half e_phnum;
  Elf64_Half e_shentsize;
  Elf64_Half e_shnum;
  Elf64_Half e_shtrndx;
} Elf64_Ehdr;

e_ident lk byte'lar dosyay bir Nesne Dosya gibi iaretler ve dosyasnn nasl decode edileceine ve yorumlanacana dair makineden bamsz veriler sunar. Daha geni bilgiyi bir sonraki blm olan 2.2.1. ELF Dosyasnn Tannmas'de bulabilirsiniz.
e_type

Nesne dosya tipi. Alabilecei deerler aadadr.

sim Deer Aklama
ET_NONE 0 Tanmsz Dosya tipi.
ET_REL 1 Yeniden Konumlandrlabilir Dosya
ET_EXEC 2 altrlabilir Dosya
ET_DYN 3 Paylaml Nesne Dosya
ET_CORE 4 Core Tipi Dosya
ET_LOOS 0xFE00 letim Sistemi tanml ilemler iin rezerv edilmi dosya tipleri aral.
ET_HIOS 0xFEFF
ET_LOPROC 0xFF00 lemci tanml ilemler iin rezerv edilmi dosya tipleri aral.
ET_HIPROC 0xFFFF

e_machine

Bilgisayarn ilemci mimarisi. Alabilecei deerler aadadr. Dier deerler yeni mimariler iin rezerv edilmitir.

sim Deer Aklama
EM_NONE 0 Belirsiz Mimari
EM_M32 1 AT&T WE 32100
EM_SPARC 2 SPARC
EM_386 3 Intel 80386
EM_68K 4 Motorola 68000
EM_88K 5 Motorola 88000
rezerv edilmi 6 lerisi iin rezerv edilmitir (EM_486)
EM_860 7 Intel 80860
EM_MIPS 8 MIPS I Architecture
EM_S370 9 IBM System/370 Processor
EM_MIPS_RS3_LE 10 MIPS RS3000 Little-endian
rezerv edilmi 11-14 lerisi iin rezerv edilmitir
EM_PARISC 15 Hewlett-Packard PA-RISC
rezerv edilmi 16 lerisi iin rezerv edilmitir
EM_VPP500 17 Fujitsu VPP500
EM_SPARC32PLUS 18 Enhanced instruction set SPARC
EM_960 19 Intel 80960
EM_PPC 20 PowerPC
EM_PPC64 21 64-bit PowerPC
EM_S390 22 IBM System/390 Processor
rezerv edilmi 23-35 lerisi iin rezerv edilmitir
EM_V800 36 NEC V800
EM_FR20 37 Fujitsu FR20
EM_RH32 38 TRW RH-32
EM_RCE 39 Motorola RCE
EM_ARM 40 Advanced RISC Machines ARM
EM_ALPHA 41 Digital Alpha
EM_SH 42 Hitachi SH
EM_SPARCV9 43 SPARC Version 9
EM_TRICORE 44 Siemens TriCore embedded processor
EM_ARC 45 Argonaut RISC Core, Argonaut Technologies Inc.
EM_H8_300 46 Hitachi H8/300
EM_H8_300H 47 Hitachi H8/300H
EM_H8S 48 Hitachi H8S
EM_H8_500 49 Hitachi H8/500
EM_IA_64 50 Intel IA-64 processor architecture
EM_MIPS_X 51 Stanford MIPS-X
EM_COLDFIRE 52 Motorola ColdFire
EM_68HC12 53 Motorola M68HC12
EM_MMA 54 Fujitsu MMA Multimedia Accelerator
EM_PCP 55 Siemens PCP
EM_NCPU 56 Sony nCPU embedded RISC processor
EM_NDR1 57 Denso NDR1 microprocessor
EM_STARCORE 58 Motorola Star*Core processor
EM_ME16 59 Toyota ME16 processor
EM_ST100 60 STMicroelectronics ST100 processor
EM_TINYJ 61 Advanced Logic Corp. TinyJ embedded processor family
EM_X86_64 62 AMD x86-64 architecture
EM_PDSP 63 Sony DSP Processor
rezerv edilmi 64-65 lerisi iin rezerv edilmitir
EM_FX66 66 Siemens FX66 microcontroller
EM_ST9PLUS 67 STMicroelectronics ST9+ 8/16 bit microcontroller
EM_ST7 68 STMicroelectronics ST7 8-bit microcontroller
EM_68HC16 69 Motorola MC68HC16 Microcontroller
EM_68HC11 70 Motorola MC68HC11 Microcontroller
EM_68HC08 71 Motorola MC68HC08 Microcontroller
EM_68HC05 72 Motorola MC68HC05 Microcontroller
EM_SVX 73 Silicon Graphics SVx
EM_ST19 74 STMicroelectronics ST19 8-bit microcontroller
EM_VAX 75 Digital VAX
EM_CRIS 76 Axis Communications 32-bit embedded processor
EM_JAVELIN 77 Infineon Technologies 32-bit embedded processor
EM_FIREPATH 78 Element 14 64-bit DSP Processor
EM_ZSP 79 LSI Logic 16-bit DSP Processor
EM_MMIX 80 Donald Knuth's educational 64-bit processor
EM_HUANY 81 Harvard University machine-independent object files
EM_PRISM 82 SiTera Prism
EM_AVR 83 Atmel AVR 8-bit microcontroller
EM_FR30 84 Fujitsu FR30
EM_D10V 85 Mitsubishi D10V
EM_D30V 86 Mitsubishi D30V
EM_V850 87 NEC v850
EM_M32R 88 Mitsubishi M32R
EM_MN10300 89 Matsushita MN10300
EM_MN10200 90 Matsushita MN10200
EM_PJ 91 picoJava
EM_OPENRISC 92 OpenRISC 32-bit embedded processor

e_version

ELF versiyonu. Alabilecei deerler aadadr.

sim Deer Aklama
EV_NONE 0 Geersiz Versiyon
EV_CURRENT 1 Gncel Versiyon

e_entry Sanal adres balangc.
e_phoff Program Balk tablosunun dosya iersideki ofseti.
e_shoff

Ksm Balk tablosunun dosya iersideki ofseti.

e_flags lemci tanml bayraklar.
e_ehsize ELF Balnn byte cinsinden uzunluu.
e_phentsize Program Balk dizisi elemannn byte cinsinden uzunluu. Btn elemanlar ayn uzunlukta olmaldr.
e_phnum Program Balk dizisi boyutu.
e_shentsize Ksm Balk dizisi elemannn byte cinsinden uzunluu. Btn elemanlar ayn uzunlukta olmaldr.
e_shnum Ksm Balk dizisi boyutu.
e_shstrndx Ksm String Tablosu ile ilikilendirilmi olan Ksm Balk Tablosu indeksi.

2.2.1. ELF Dosyasnn Tannmas

ELF bir Nesne Dosya olarak ok ilemci destei, oklu "data encoding" ve oklu snflama destei sunar. Dosya iersindeki ilk byte'lar ilgili dosyann nasl yorumlanaca bilgisini tutar.

ELF Balnn ilk byte'lar e_ident yesini ierir.

e_ident[] tanmlayc indeksleri
sim Deer Aklama
EI_MAG0 0 Dosya tanmlamas
EI_MAG1 1 Dosya tanmlamas
EI_MAG2 2 Dosya tanmlamas
EI_MAG3 3 Dosya tanmlamas
EI_CLASS 4 Dosya Snf
EI_DATA 5 Data encoding
EI_VERSION 6 Dosya versiyonu
EI_OSABI 7 letim Sistemi/ABI tanmlamas
EI_ABIVERSION 8 ABI versiyonu
EI_PAD 9 Hizalama iin boluklar doldurma ileminin balayaca byte'lar.
EI_NIDENT 16 e_ident[] dizisinin boyutu

Bu indeksler aadaki deerleri tutan byte'lara eriir.

EI_MAG0 dan EI_MAG a
lk 4 byte; bunlar ELF dosyasnn tannmas iin belirli deerler tutarlar.

sim Deer Aklama
ELFMAG0 0x7F e_ident[EI_MAG0]
ELFMAG1 'E' e_ident[EI_MAG1]
ELFMAG2 'L' e_ident[EI_MAG2]
ELFMAG3 'F' e_ident[EI_MAG3]

EI_CLASS
sonraki byte (5. byte), e_ident[EI_CLASS], dosyann snfn yada kapasitesini tutar.
sim Deer Aklama
ELFCLASSNONE 0 Geersiz snf
ELFCLASS32 1 32-bit Nesne
ELFCLASS64 2 64-bit Nesne

Nesne Dosya biimi etli mimarilerde (32-bit yada 64-bit) tanabilirliin olabilmesi ynnde dizayn edilmitir ve bu mimarilerden hi birinde dosya biimi asndan birbirine stnlk yoktur.

ELFCLASS32 snf 32-bit mimarilere destek verir. Bu snflar 32-Bit Veri Tipleri tablosundaki tipleri kullanr. ELFCLASS64 ise 64-bit mimarilere destek verir ve oda 64-Bit Veri Tipleri tablosundaki tipleri kullanr. Dier snflar ise gerekli farkllkar ile birlikte gerektike ileride tanmlanm olacaklar.

EI_DATA
e_ident[EI_DATA] byte' Nesne Dosya tarafndan kullanlan veri yaplarn ve dosyann Blm'lerinin iinde bulunan verinin ecode edilmesi ilemini belirtir. Aada uan iin tanml encoding eitleri listelenmitir.

sim Deer Aklama
ELFDATANONE 0 Belirsiz data encoding
ELFDATA2LSB 1 Aaya, grafie baknz.
ELFDATA2MSB 2 Aaya, grafie baknz.

Dier deerler gerektike encoding ilemleri tanmlanabilmesi iin rezerv edilmitir.

EI_VERSION
e_ident[EI_VERSION] byte' ELF balnn versiyon numarsn tutar. u an iin bu deer EV_CURRENT, olmaldr; e_version da olduu gibi.
EI_OSABI
e_ident[EI_OSABI] byte' iinde bulunduu dosya tarafndan kulanlan letim Sistemi veya ABI 'ye zgl ELF eklerini belirler. Dier baz ELF yaplarnn baz alanlar da letim Sistemi ve/veya ABI'ye zgl bayraklar yada deerlere sahiptirler; bu alanlarn aklamalar da bu byte'lar tarfndan tayin edilir. Eer Nesne Dosya yukardaki trden eklentiler kullanmaz ise bu byte'in deerinin 0 olmas tavsiye edilir. Eer bu byte'n deeri 64 - 256 arasnda bir deer ise sonu, burdaki deer yerine kullanlacak deerin ELF Balk yaps eleman olan e_machine'den alnacadr. ABI bu aralkta ki deerleri, lemci Mimarileri iin kendilerine bu byte'ta kullanmak zere gerekli deerler tanmlamas iin ayrmtr. Eer yinede o aralkta bir deer yok ise, aada bulunan tablodaki deerler bu byte iin (ilgili ilemci iin) kullanlabilir.
sim Deer Aklama
ELFOSABI_NONE 0 Eklentisiz yada belirsiz
ELFOSABI_HPUX 1 Hewlett-Packard HP-UX
ELFOSABI_NETBSD 2 NetBSD
ELFOSABI_LINUX 3 Linux
  4 IA32 GNU Mach/Hurd iin rezerv edilmitir.
  5 86Open common IA32 ABI iin rezerv edilmitir.
ELFOSABI_SOLARIS 6 Sun Solaris
ELFOSABI_AIX 7 AIX
ELFOSABI_IRIX 8 IRIX
ELFOSABI_FREEBSD 9 FreeBSD
ELFOSABI_TRU64 10 Compaq TRU64 UNIX
ELFOSABI_MODESTO 11 Novell Modesto
ELFOSABI_OPENBSD 12 OpenBSD
  64-255 lemci Mimarileri iin ayrlm deerler alan.
EI_ABIVERSION
e_ident[EI_ABIVERSION] byte', hangi Nesne'nin hedeflendiine ilikin ABI versiyon'unu tutar. Buras uyumsuz bir ABI'den ayrt edilmek iin kullanlr. Bu versiyon numarsnn yorumlanmas da EI_OSABI 'deki ABI tespitine baldr. Eer EI_OSABI'de bir deer tanmlanmam ise EI_ABIVERSION iinde 0 deeri kullanmladr. 0 'unspecified' yani belirsizlie iaret eder.
EI_PAD
Bu deer e_ident iinde kullanlmayan byte'larn yerine iaret eder. Bu byte'lar rezerv edilmitir ve ileri 0 olarak doldurulmutur ve program bu ksmlar okudumadan geer. EI_PAD'n deeri, ilerde bu bo byte'lara bir anlam verilmesi hedeflendii zaman deitirilecektir.

Bir dosyada "data encoding" ilemi, esas Nesne'lerin dosya iersinde nasl yorumlanacan belirler. ELFCLASS32 snf dosyalar 1,2 ve 4 byte'lk alanlar kullanrlar. ELFCLASS64 snf dosyalar ise 1, 2, 4 ve 8 byte'lk alanlar mekul ederler. Aada tanmlanm encoding ilemleri grlmektedir.

ELFDATA2LSB Data Encoding


ELFDATA2LSB
encoding'i 2 nin tamlayan olan deerleri belirtir ve en kk ncelikli byte en dk adreste tutulur.

ELFDATA2MSB Data Encoding


ELFDATA2MSB encoding'i 2 nin tamlayan olan deerleri belirtir ve en yksek ncelikli byte en dk adreste tutulur.

2.3. Ksm'lar ve Ksm Balk Tablosu

Ksm Balk Tablosu hem Yeniden Konumlandrlabilir Dosya hemde Paylaml Nesne Dosyalar da bulunur. Ksm'lar derleyici, assembly yorumlaycs ve balayc programlar tarafndan uzak sreleme iin tasarlanmtr. Belirli sayda Ksm vardr ve bunlar Ksm Balk Tablosunda tanmlanmlardr. Ksm'lar; altrlabilir kod, veri, dinamik balama iin gerekli bilgiler; hata ayklama bilgisi, sembol tablosu, yeniden konumlandrma bilgisi, yorum, string tablosu ve baz notlar ierirler. Ksm'lar ELF balk hari Nesne dosyann btn bilgilerini yani Program Balk Tablosunu ve Ksm Balk Tablo'sunu tutarlar. Bunlarn dnda bir ka grevide yine Ksm'lar stlenmilerdir.

Her Ksm dosyada birbirini takip eden byte'larda bulunur. Ksm'lar dosyada st ste binemezler ve hi bir byte bir Ksm'dan fazlasnda bulunamaz. Bir Nesne Dosya, pasif veri ihtiva eden bir alan da ihtiva edebilir. Ve bu alann ierii belirsizdir.

Ksm Balk Tablo'su Elf32_Shdr yaps tipinde bir dizidir. Ve bu dizinin indekslerinden bazlar rezerv edilmitir.Bu indeksler aada listelenmektedir.

sim Deer Aklama
SHN_UNDEF 0 Bu indeks deeri tanmsz, eksik, anlamsz gibi anlamlara gelen bir yedir.
SHN_LORESERVE 0xFF00 Bu deer indeks olarak rezerv edilmi olan rakamsal aralnn en alt snrdr.
SHN_LOPROC - SHN_HIPROC 0xFF00 - 0xFF1F Bu deerler aras kullanmlar ilemi'ye zgl iler iin rezerv edilmitir.
SHN_ABS 0xFFF1 Bu indeks karlkl referanslarn tam deerlerini belirtir.
SHN_COMMON 0xFFF2 Bu Ksm ile ilgili olarak tanmlanm semboller ortak sembollerdir; Fortran'daki Common yada C deki yerleri henz tahsis edilmemi harici deikenler gibi.
SHN_HIRESERVE 0xFFFF Bu deer indeks olarak rezerv edilmi olan rakamsal aralnn en st snrdr. SHN_LORESERVE ve SHN_HIRESERVE arasndaki deerler Ksm Balk tablosunda bulunamazlar.

NOT : Burada indeks 0'nda rezerv edildii grlyor, fakat Ksm Balk Tablo 0 indeksi iin bir dizi eleman bulundurur. Yani, eer ELF Balk yapsnda ki e_shnum'n deeri 6 ise dosya da Ksm Balk Tablosunda 6 tane giri var demektir ve bu giriler 0 dan 5 'e indekslenmitir. lk girilerin ierii de bu Ksm iinde daha sonra belirtilmitir.

ELF Balk yaps yelerinden e_shoff, Ksm Balk Tablo'sunun dosyadaki byte ofsetini verir, e_shnum Ksm Balk Tablo'sunun ka adet girdisi olaca bilgisini tutar, e_shentsize ise her girdinin byte cinsinden boyutunun nekadar olaca bilgisini saklar. Bir Nesne dosyada her Ksm kendisini tantan bir Ksm Balk'a sahiptir. Fakat Ksm Balk'lar bir Ksm' olmadan da var olabilirler.

Ksm Balk yaps
typedef struct {
  Elf32_Word sh_name;
  Elf32_Word sh_type;
  Elf32_Word sh_flags;
  Elf32_Addr sh_addr;
  Elf32_Off sh_offset;
  Elf32_Word sh_size;
  Elf32_Word sh_link;
  Elf32_Word sh_info;
  Elf32_Word sh_addralign;
  Elf32_Word sh_entsize;
} Elf32_Shdr;


typedef struct {
  Elf64_Word sh_name;
  Elf64_Word sh_type;
  Elf64_Xword sh_flags;
  Elf64_Addr sh_addr;
  Elf64_Off sh_offset;
  Elf64_Xword sh_size;
  Elf64_Word sh_link;
  Elf64_Word sh_info;
  Elf64_Xword sh_addralign;
  Elf64_Xword sh_entsize;
} Elf64_Shdr;

sh_name Ksmn ismi iin string tablosundaki indeks numars tutulur.
sh_typeKsm tipi.
sh_flags Bayrak bitleri.
sh_addrEer bellee yklenebilir trden ise Ksm'n temel bellek adresi, aksi durumda 0.
sh_offset Dosyann iinde Ksm'larn balad ilk byte'n yeridir.
sh_size Ksm'n byte olarak kaplad alan.
sh_link Bu yede Ksm Balk tablosundaki indeks'e ba bulunur.
sh_info Ksm'n tipi hakknda fazladan bilgi tutulur.
sh_addralign Adres hizalams iin snr, bu deer ile belirlenir.
sh_entsize Baz Ksm'lar uzunluklar nceden belirlenmi elamanlar olan tablolar tutarlar, rnein Sembol Tablosu gibi. te bu uzunluk deeri bu eleman ile belirlenir.

Ksm Balk Tablo elemanlar isim, tip, Ksm' bellee yklemek iin balang adresi (eer yklenebilir tip ise), dosya ofseti, Blm'n byte olarak boyutu, sra numaras, ve Ksm'daki bilgilerin nasl yorumlanacana dair bilgiler ierir. sim olarak ihtiva edilen ve Unsigned Int trnden olan bilginin string tipinden karl String Tablosu (aslen buda bir Ksm'dr) iersindedir.

Bugnk Nesne Dosyalar her tipden sadece bir Ksm iermektedir fakat bu zellik ilerisi iin geni tutulmutur. Aada Ksm'larn tipleri, deerleri ve anlamlar bir tabloda listelenmektedir.

Ksm Tipleri / sh_type
Tip Deer Aklama
SHT_NULL 0 Bu tip Ksm baln inaktif olarak iaretler. Bu birleik Ksm'larda kullanlmaz.
SHT_PROGBITS 1 Bu tip Ksm'lar iersinde biimi ve anlam program tarafndan belirlenen bilgiler tutulur.
SHT_SYMTAB 2 Bu Ksm'lar Sembol Tablosunu tutarlar.
SHT_STRTAB 3 Bu tip Ksm'lar da String Tablosu tutulur. Bir Nesne Dosyada birden ok String Tablosu olabilir.
SHT_RELA 4 Bu Ksm'larda Yeninden Konumlandrma bilgileri tutulur. Bir Nesne Dosyada birden ok Yeniden Konumlandrma Ksm' bulunabilir.
SHT_HASH 5 Bu tip Ksm'larda Sembol Hash Tablosu tutulur. Balama ilemine katlan tm Nesne Dosya'lar mulaka Sebmol Hash Tablosu barndrrlar. Bugnk Nesne Dosya'larda bir tane Sebmol Hash Tablosu olmas ngrlmtr fakat ilersi iin bu zellikte gevek tutulmutur.
SHT_DYNAMIC 6 Bu Ksm dinamik balama ilemi ile ilgili bilgileri ierir. Bunlarnda bir adet olmas sz konusudur bugnk durumda, fakat yine ilersi iin gevek tutulmutur.
SHT_NOTE 7 Bu tip Ksm'lar dosyalarn baz durumlar iin duruma zel iaretler barndrmas iindir.
SHT_NOBITS 8 Bu tip bir Ksm dosya iersinde bir yer kaplamaz. Ama aksi bir durum ise SHT_PROGBITS'e benzerlikleridir.
SHT_REL 9 Bu Ksm'lar da Yeniden Konumlandrma bilgileri tutulur. Bir Nesne Dosya'da birden ok Yeniden Konumlandrma Ksm' bulunabilir.
SHT_SHLIB 10 Bu tip rezerv edilmitir. Bu tip bir Ksm ieren bir nesne dosya ABI'ye uymaz.
SHT_DYNSYM 11 Bu Ksm'lar Sembol Tablosunu tutarlar.
SHT_INIT_ARRAY 14 Bu Ksm balang ilemleri iin kullanlacak olan fonksiyonlara iraret eden iaretilerin bulunduu bir diziyi tutar.
SHT_FINI_ARRAY 15 Bu Ksm ise biti ilemleri iin kullanlacak olan fonksiyonlara iraret eden iaretilerin bulunduu bir diziyi tutar.
SHT_PREINIT_ARRAY 16 Bu Ksm'da balang ilemleri iin kullanlacak olan fonksiyonlar tarafndan kullanlacak olan fonksiyonlara iraret eden iaretilerin tutulduu bir dizi tutulur.
SHT_GROUP 17 Bu Ksm bir Ksm grubu tanmlar. Ksm grubu birbiri ile ilgili Ksm'larn kmelenmesidir ve balayc tarafndan kullanlr. Sadece Yeniden Konumlandrlabilir Nesne' lerde grlr.
SHT_SYMTAB_SHNDX 18

Bu ksm SHT_SYMTAB tr bir ksm ile ilikilidir ve eer herhangi bir ksmn balk indeksi SHN_XINDEX escape deeri ieren bir Sembol Tablosu tarafindan referans ediliyorsa gereklidir. Ksm Elf32_word deerlerinden oluan bir dizidir. Her bir deer Sembol Tablosu verisi ile birebir uyuur ve bu girdilerle ayn srada grnr. Bahsedilen deerler, tanml Sembol Tablosu girilerine karlk Ksm Balk indekslerini temsil eder. Yalnzca eer edeer Sembol Tablosu verisinin st_shndx alan SHN_XINDEX escape deeri ieriyorsa, eleen Elf32_word gerek Ksm Balk indeksini tutuyor olacaktr. Aksi takdirde Sembol Tablosu girdisi SHN_UNDEF sfr olmaldr.

SHT_LOOS 0x60000000 Bu aralktaki deerler (snrlarda dahil), iletim sistemi tanml semantik'ler iin ayrlmlardr.
SHT_HIOS 0x6FFFFFFF
SHT_LOPROC 0x70000000 Bu deerler aras (snrlarda dahil) kullanmlar ilemciye zgl iler iin rezerv edilmitir.
SHT_HIPROC 0x7FFFFFFF
SHT_LOUSER 0x80000000 Bu deer, uygulama programlar iin ayrlm olan rakamsal aralnn en alt snrdr.
SHT_HIUSER 0xFFFFFFFF Bu deer, uygulama programlar iin ayrlm olan rakamsal aralnn en st snrdr. SHT_LOUSER ve SHT_HIUSER arasndaki deerler sadece uygulama programlar iin ayrlmlardr ve asla imdi kullanlan yada gelecekte kullanlacak olan sistem tanml Ksm tipleri ile bir akma olmaz.

Dier Ksm tip deerleri reserv edilmitir. ndeks 0 tanmlanmam Ksm' gstermesine ramen, Ksm Balnn indeks 0 deeri doldurulmutur (SHN_UNDEF). Bu deerler aadaki gibidir.

sim Deer Aklama
sh_name 0 isimsiz (No name)
sh_type SHT_NULL etkisiz (Inactive)
sh_flags 0 bayrak yok (No flags)
sh_addr 0 adres yok (No address)
sh_offset 0 dosya ofseti yok (No file offset)
sh_size 0 boyut yok, yer kaplamayan (No size)
sh_link SHN_UNDEF balanma bilgisi yok (No link information)
sh_info 0 yardmc bilgi yok (No auxiliary information)
sh_addralign 0 hizalama yok (No alignment)
sh_entsize 0 giri yok (No entries)

Ksm Balk' yaps yesi olan sh_flags 1 bit'lik bir bayrak deeri tar bu deer ile Ksm'n znitelii belirlenir. Aada bu deerler listelenmitir.

sim Deer Aklama
SHF_WRITE 0x1 Bu znitelikdeki Ksm'lar, srecin alma zaman boyunca deitirilebilir veri ierirler.
SHF_ALLOC 0x2 Bu znitelikdeki Ksm srecin alma sresi boyunca bellekte kalr. Baz kontrol Ksm'larnda ise buna gerek yoktur ki ite bu znitelik bu Ksm'lar iin kullanlmam durumdadr.
SHF_EXECINSTR 0x4 Bu znitelikli Ksm'lar altrlabilir makina komutlar ierirler.
SHF_MASKPROC 0xF0000000 Bu znitelikteki btn bit'ler ilemciye zg ilemler iin rezerv edilmitir.

2.3.1 zel Tanmlanm Ksm'lar

sim Tip znitelik Aklama
.bss SHT_NOBITS SHF_ALLOC + SHF_WRITE

Bu Ksm'da program balangcnda ilk deer verilmemi deikenler tutulur. Bu Ksm, tipininde iaret ettii gibi diskte yer kaplamaz.

.comment SHT_PROGBITS - Versiyon kontrol bilgileri tutulur.
.data SHT_PROGBITS SHF_ALLOC + SHF_WRITE Program balangcnda ilk deer verilmi deikenler tutulur.
.data1 SHT_PROGBITS SHF_ALLOC + SHF_WRITE
.debug SHT_PROGBITS - Sembolik hata ayklama ilemi bilgileri tutulur. erii belirlenmemitir. Btn ".debug" n isimli Ksm isimleri ilerki kullanmlar iin rezerv edilmitir.
.dynamic SHT_DYNAMIC aklamaya baknz -> Dinamik balama bilgileri tutulur. SHF_ALLOC ve SHF_WRITE gibi zniteliklere sahiptir. SHF_WRITE bit'i letim Sistemi ve lemci tarafndan tayin edilir.
.dynstr SHT_STRTAB SHF_ALLOC Dinamik balama iin gerekli string'ler tutulur (genelde bu stringler Sebmol Tablosu ile ilikilidirler).
.dynsym SHT_DYNSYM SHF_ALLOC Dinamik balama ile ilgili Semnol Tablosu burada tutulur.
.fini SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR Bu ksmda programn sonlandrlmasnda alacak olan koda ynelik bilgiler bulunur (sadece c++ iin).
.got SHT_PROGBITS aklamaya baknz -> Global Ofset Tablosu burda tutulur.
.hash SHT_HASH SHF_ALLOC Hash Sembol Tablosu burda tutulur.
.init SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR Bu ksmda programn balangcnda alacak olan koda ynelik bilgiler bulunur (sadece c++ iin, C'de burda sadece main() arlr.).
.interp SHT_PROGBITS aklamaya baknz -> Bu ksm program yorumlayc yolu bilgisini tutar (rn: *.sh dosyalarnda en stteki #!/bin/sh). Eer bu ksm dosyada var ise sistem program direk altrmaktansa elf dosyasn ve bu ksm interpreter'a argman olarak gnderir. Bu ksm, pratikte alma zaman srasnda dinamik balama ile program altrma ve paylaml ktphane'den gerekli olanlar balamak iin kullanlyor.
.line SHT_PROGBITS - Bu ksmda, sembolik hata ayklama ilemi iin kaynak kodun satr numaralar tutulur. erii belirlenmemitir. (GNU gdb gibi hata ayklama programlar iin)
.note SHT_NOTE - Bu Ksm'da baz ekstra bilgiler tutulur. Daha geni bilgiyi 6.2 Not Ksm' bal altnda bulabilirsiniz.
.plt SHT_PROGBITS aklamaya baknz -> Burda Yntem balant Tablosu (Procedure Linkage Table) tutulur.
.relname SHT_REL aklamaya baknz -> Bu ksm Yeniden Konumlandrma iin ilgili Ksm hakknda eitli bilgileri tututar. "name" ksmna hangi Ksm'a Yeniden Konumlandrma ilemi uygulanacaksa onun ismi gelir ve onunla ilgili bilgiler tutulur. Mesela .text ksm iin .rel.text yada .rela.text. veya .rel.data .rel.rodata gibi.
.relaname SHT_RELA aklamaya baknz ->
.rodata SHT_PROGBITS SHF_ALLOC Burada sre imajnn yazma korumal Blm'leri iin yine yazma korumal bilgiler saklanr.
.rodata1 SHT_PROGBITS SHF_ALLOC
.shstrtab SHT_STRTAB - Burada Ksm isimleri tutulur.
.strtab SHT_STRTAB aklamaya baknz ->

Burda genellikle sebmol tablosundaki girilerle badatrlm isimler yani string'ler tutulur. Eer dosyada String Tablosunu ieren yklenebilir bir Blm var ise Ksm'n znitelikleri SHF_ALLOC bit'ini ierecektir, aksi durumda ilgili bit kullanlmam olacaktr.

.symtab SHT_STRTAB aklamaya baknz ->

Burada sembol tablosu tutulur. Eer dosyada Sembol Tablosunu ieren yklenebilir bir Blm var ise Ksm'n znitelikleri SHF_ALLOC bit'ini ierecektir, aksi durumda ilgili bit kullanlmam olacaktr.

.text SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR Bu Ksm'da programa ait altrlabilir talimatlar (instruction) bulunur.

Ksm isimleri "." neki alm halde sistem iin rezerv edilmilerdir, ancak mevcut anlamlar yeterli ise uygulamalar da bu Ksm'lar kullanabilirler. Uygulama programlar sistem Ksm'lar ile bir karkla sebep olmamak iin isimlendirmede "." kullanmayabilirler. Nesne Dosya Biimi yukardaki listede olmayan bir tanmlamayada izin verir. Bir Nesne dosyada ayn isimde Ksm'lar olabilir. lemci Mimarileri iin mimari ismi ksaltmas nde olacak ekilde Ksm isimleri rezerv edilmitir.

2.4. String Tablosu

Bu Ksm varsaylan String tablosunu tanmlar. String Tablosu Ksm'lar "NULL" ile sonlanrlm karakter dizileri tutarlar ve bunlar genellikle String olarak anlrlar. Nesne Dosya bu String'leri Sembol ve Ksm isimlerini belirtmede kullanrlar. Nesne Dosya, String Tablosu Ksm'ndaki indeks niteligindeki bir kelimeye iaret eder. Ilk byte ki bu Indeks 0'dr, "NULL" karakter barndrr. Ayn ekilde String Tablosunun son byte' da "NULL" karakterdir ki tm string'lerin sonunun "NULL" ile bitmesinden emin olunsun. Indeks 0'da bulunan String ierie bal olarak "no name" yada "null name" belirtir. Bo String Tablosu Ksm'larna izin verilmitir, bu durumda o Ksm Balk sh_size deeri sfr olacaktr. Sfrdan farkl indeks bo String tablosu iin geersizdir.

Bir Ksm Balk sh_name yesi, Ksm Balk String Tablosu iine iaret eden ve ELF Balk yesi e_shstrndx tarafndan gsterilen bir indeks tutar. Aada tabloda 25 byte olan ve eitli indeks deerleri ile ilikilendirilmi bir String Tablosu rnei grlmektedir.

ndeks +0 +1 +2 +3 +4 +5 +6 +7 +8 +9
0 \0 n a m e . \0 V a r
10 i a b l e \0 a b l e
20 \0 \0 x x \0  

String Tablosu ndeksleri

ndeks String
0 none
1 name.
7 Variable
11 able
16 able
24 null string

rnekte grld gibi, bir String Tablosu ndeks'i Ksm'da herhangi bir byte ile ilikilendirilmi olabilir. Bir Sitring birden fazla grnebilir, substring'lere referans edilebilir ve bir String birden cok kere referans edilebilir. Bir tabloda referans edilmemi String'lerde bulunabilir.

2.5. Sembol Tablosu

Bir Nesne Dosya Sembol Tablosu, Program sembolik tanm ve referanslarnn yerletirilebilmeleri veya Yeniden Konumlandrlabilmeleri iin ihtiya duyulan bilgileri tutarlar. Bir Ksm Balk Tablosunun indeksi bu diziyi tanmlayan bir numaradr. ndeks 0 hem tablodaki ilk girie iaret eder hemde tanmsz sebmol indeks'i gibi davranr. erie dair balang girileri bu Ksm'dan nce belirlenmitir.

sim Deer
STN_UNDEF 0

Bir Sembol tablosu girileri aadaki yapdadr..

Sembol Tablosu girii
typedef struct {
  Elf32_Word st_name;
  Elf32_Addr st_value;
  Elf32_Word st_size;
  unsigned char st_info;
  unsigned char st_other;
  Elf32_Half st_shndx;
} Elf32_Sym;

typedef struct {
  Elf64_Word st_name;
  unsigned char st_info;
  unsigned char st_other;
  Elf64_Half st_shndx;
  Elf64_Addr st_value;
  Elf64_Xword st_size;
} Elf64_Sym;

Tip Aklama
st_name Bu ye, Nesne Dosya Sembol String tablosunda bulunan ve Sembol isminin karakter betimleyicilerini barndran bir indeks tutar. Eer sfrdan farkl ise, Sembol ismini veren bir String Tablosu indeks'ini belirtir. Aksi durumda, Sembol tablosu kayd isimsizdir.
st_value Bu ye, ilikilendirilmi sembol deerini verir. erie bal olarak bu bir mutlak deer, bir adres yada benzeri olabilir.
st_size ou sembol'ler ilikili boyutlara sahipdirler. rnein, Veri Nesne boyutu Nesne iinde barndrlan baytlardr. Eer sembol yer kaplamayan, boyutsuz ise bu ye sfr yada bilinmeyen size olacaktr.
st_info

Bu ye Sembol'n tipini ve binding zelliklerini tanmlar. Alabilecei deerler ve anlamlar aada grlmektedir. Aada bulunan rnek kodlarda da deerlerin nasl ilenecei grlmektedir.

#define ELF32_ST_BIND(i) ((i)>>4)
#define ELF32_ST_TYPE(i) ((i)&0xf)
#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))

#define ELF64_ST_BIND(i) ((i)>>4)
#define ELF64_ST_TYPE(i) ((i)&0xf)
#define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))

st_other

Bu ye imdilik sfrdr, ve bir tanm yaplmamtr.

st_shndx Her Sembol Tablosu girii bir Ksm ile ilikili olarak tanmlanmlardr. Bu ye, ilgili Ksm Balk Tablosu indeks deerini tutar. "Ksm Tipleri" ile ilgili tabloda baz ndeks'lerin ne anlama geldikleri belirtilmeketdir.

Bir sembol'n binding zellii balama durumunu belirler.

Sembol Binding, ELF32_ST_BIND
sim Deer Aklama
STB_LOCAL 0 Yerel semboller tanmlamalarn barndran dier Nesne Dosya'lar iin grlebilir deildirler. Birden ok dosyada ayn isimdeki yerel semboller birbirine karmadan var olabilirler.
STB_GLOBAL 1 GLOBAL semboller birletirildikleri dier dosyalar iin grlebilirdirler. Bir dosyann global sembol tanmlamas baka bir dosyada da kullanma izin verir.
STB_WEAK 2 WEAK semboller GLOBAL sembollere benzerler, ancak onlarn tanmlamalar dk celiklidir.
STB_LOPROC 13 Bu aralkta bulunan deerler lemcilere zg anlamlar iin rezerv edilmidir.
STB_HIPROC 15

Herbir sembol tablosunda STB_LOCAL binding ieren semboller WEAK ve GLOBAL sembollerinden nce gelir. Bir Sembol'n tipi dierleri ile birlikte varolabilmesi iin bir genel snflandrma salar. ELF Nesne dosyasnda bulunan semboller, Balayc ve Ykleyici iin tamaya has bilgilerdir.

Sembol Tipleri, ELF32_ST_TYPE
sim Deer Aklama
STT_NOTYPE 0 Sembol'n tipi tanmlanmamtr.
STT_OBJECT 1 Bu sembol veri nesnesi ile ilgilidir. deiken, dizi, vs.
STT_FUNC 2 Bu sembol bir fonksiyon yada baka bir altrlabilir kod ile ilgilidir.
STT_SECTION 3 Bu sembol bir Ksm ile ilgilidir. Bu tip sembol tablosu girileri ncelikle yeniden konumlandrma iin var olmaktadr ve STB_LOCAL binding'ine sahiptirler.
STT_FILE 4

Bir dosya sembolu STB_LOCAL binding'ine sahiptir, Ksm ndeks'ide SHN_ABS'dir ve eer mevcut ise o dosyann dier STB_LOCAL sembollerinden nce gelir.

STT_LOPROC 13 Bu aralkta bulunan deerler lemcilere zg anlamlar iin rezerv edilmitir. Eer bir Sembol'n deeri, bir Ksm iinde belirli bir yer ile ilgili ise, onun Ksm ndeks yesi st_shndx, Ksm Balk Tablosundaki bir indeksi tutar. Yeniden konumlandra srasnda Ksm tanrken, sembol deeride olduu gibi deiir ve sembole olan referans ayn noktay gstermeye devam eder. Baz zel Ksm indeks deikenleri baka anlamdadrlar.
STT_HIPROC 25
SHN_ABS - Sembol yeniden konumlandrma yznden deimeyen bir mutlak deere sahiptir.
SHN_COMMON -

Sembol etiketleri henz tahsis edilmemi genel bloklardr. Sembol deeri Ksm'e ait sh_addralign yesine benzer ekilde hizalama kstlamasn verir. Sembol iin balama Balama Program st_value deerinin katlarnda bellek ayracaktr. Bu sembol'n boyutu ka byte gerekdiini bildirir.

SHN_UNDEF - Bu Ksm Tablosu ndeks'i, Sembol tanmszdr anlam tar. Ne zamanki Balama Program bu Nesne dosyay bir bakas ile birletirirse o zaman gsterilmi sembolleri tanmlar yani bu dosyada kullanlan sembol referanslar gerek tanmlamalar ile balanacaktr.

Yukarda da bahsedildii gibi, Sembol Tablosu deeri olan Indeks 0 (STN_UNDEF) rezerv edilmitir ve aadaki deerleri alr.

Sembol Tablosu Girii: Indeks 0
sim Deer Aklama
st_name 0 smi olmayan (No Name)
st_value 0 Sfr deeri (Zero value)
st_size 0 Yer Kaplamayan (No size)
st_info 0 Tipi olmayan, yerel binding olmayan (No type, local binding)
st_other 0  
st_shndx SHN_UNDEF Ksm' olmayan (No section)

2.5.1. Sembol Deerleri

Sembol tablosu girileri, st_value'den dolay farkl Nesne Dosya tipleri iin biraz farkl yorumlara sahiptirler.

Sembol tablosu deerleri farkl Nesne dosyalar iin benzer anlamlara sahip olsada, veriye etkin eriim uygun program tarafndan salanabilmektedir.

2.6. Yeniden Konumlandrma

Yeniden konumlandrma sembolik referans ile sembolik tanmlama arasnda bir balant kurma iidir. rnein, program bir fonksiyon ardnda, ilikilendirilmi arma talimat (call instruction) kontrol alma esnasnda doru adrese transfer etmelidir. Baka bir deyile, yeninden konumlandrlabilir dosyalar kendi Ksm ieriklerinde nasl deiiklik yaplabileceine dair bilgi iermelidirler. Bylece altrlabilir ve paylaml nesne dosyalar, sre program imaj iin doru bilgiyi tutmabilirler. Yeniden konumlandrma girileri bu verilerdir.

Yeniden Konumlandrma girileri
typedef struct {
  Elf32_Addr r_offset;
  Elf32_Word r_info;
} Elf32_Rel;

typedef struct {
  Elf32_Addr r_offset;
  Elf32_Word r_info;
  Elf32_Sword r_addend;
} Elf32_Rela;


typedef struct {
  Elf64_Addr r_offset;
  Elf64_Xword r_info;
} Elf64_Rel;

typedef struct {
  Elf64_Addr r_offset;
  Elf64_Xword r_info;
  Elf64_Sxword r_addend;
} Elf64_Rela;

sim Deer
r_offset Bu ye hangi alana yeniden konumlandrma ilemi yaplaca bilgisini verir. Yeniden Konumlandrlabilir dosya iin bu deer, Ksm balangcndan yeniden konumlandrma ilemi tarafndan etkilenmi bellek birimine kadar olan byte ofset'idir. altrlabilir ve paylaml nesne dosyalar iin bu deer yeniden konumlandrma ilemi tarafndan etkilenmi bellek alannn bir sanal adresidir.
r_info

Bu ye hem yeniden konumlandrma yaplmas gereken konumu iaret eden Sembol Tablosu indeks deerini hemde ne tr bir yeniden konumlandrma yaplmas gerektii bilgisini verir. rnein, bir arma talimatnn (call instruction) yeniden konumlandrma girii fonksiyonun arlna dair bir Sembol Tablosu indeks'ini tutar. Eer indeks STN_UNDEF ise, tanmsz sembol indeksi, yeniden konumlandrma "sembol deeri" olarak 0 kullanr. Yeniden konumlandrma tipleri ilemciye zgdr. Ne zaman ilemci ilavesindeki text bir yeninden konumlandrma giriinin tipi yada sembol tablosu indeksine bavurursa, bunun anlam ELF32_R_TYPE (veya ELF64_R_TYPE) yada ELF32_R_SYM (veya ELF64_R_SYM) uygulamann (aadaki makrolar altrmann) sonucu srasyla giriin r_info yesidir.

#define ELF32_R_SYM(i) ((i)>>8)
#define ELF32_R_TYPE(i) ((unsigned char)(i))
#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t))

#define ELF64_R_SYM(i) ((i)>>32)
#define ELF64_R_TYPE(i) ((i)&0xffffffffL)
#define ELF64_R_INFO(s,t) (((s)<<32)+((t)&0xffffffffL))

r_addend Bu ye yeniden konumlandrlabilir alanda saklanacak deeri hesaplamak iin kullanlacak bir deimez soneki belirtir.

Yukarda da grld gibi, sadece Elf32_Rela girileri belirgin bir sonek iermektedir. Elf32_Rel tipinin girileri, ilgili alanda farkl olmak iin bir tam sonek barndrrlar. lemci mimarisine bal olarak bir isimlendirme formu yada bakas daha gerekli yada uygun olabilir. Sonu olarak, belirli bir makina iin kullanlan uygulama ilemi (implementation) yalnz bir form'u yada ierie bal olan herhangi bir form'u kullanabilir.

Bir yeniden konumlandrma Ksm' iki baka Ksm'a referanstr: bir sembol tablosu ve deitirmek iin bir Ksm. Yukarda anlatld gibi Ksm Bal yeleri sh_info ve sh_link bu ilikiyi belirler. Farkl dosyalar iin yenieden konumlandrma girileri r_offset yesinden dolay biraz farkl yorumlara sahiptirler.

Yeninden konumlandrlabilir dosyalarda r_offset bir Ksm ofseti tutar. Yani, yeniden konumlandrma Ksm'nn kendisi dosya iersinde baka bir Ksm'n nasl deitirileceini tarif eder, yeniden konumlandrma ofset'leri ikinci Ksm'da bir bellek birimi tarif ederler.

altrlabilir ve paylaml nesne dosyalarda r_offset bir sanal adres tutar. Ksm ofset (dosya yorumu), Dinamik Balayc'da bu dosyann yeniden konumlandrma girilerini daha kullanl yapmak iin sanal adresler'e (bellek yorumu) izin verir.

Farkl Nesne dosyalarda r_offset yorumu, ilgili program tarafndan daha etkin bir eriim iin deiiyorsa da, yeniden konumlandrma tipleri anlamlar hep ayn kalr.

3. Program Ykleme ve Dinamik Balama

altrlabilir ve Paylaml Nesne dosyalar statik olarak programlar gsterirler. Sistem dinamik program gsterimleri (representations) yada sre imaj oluturmak iin dosyalar kullanr, bunu bir program altrmak iin yapar. Bir sre imaj kendi text, data, stack vb. eyleri barndran Blm'lere sahiptir. Birinci veri yaps, bir Program Balk Tablosu, Blm imajlarn dosyann iinde bulundurur ve program iin bellek imaj oluturulmakta kullanlmak zere dier gerekli bilgileri ierir.

Verilen bir Nesne Dosyasn altrabilmek iin sistem onu bellee ykler. Ykledikten sonra sistem, Nesne Dosyalar arasndaki sembolik referanslar zmleyerek sre imajn tamamlamaldr ki sreci oluturabilsin.

3.1. Program Balk Tablosu ve Blm'ler

Program Balk Tablosu, altrlabilir ve Paylaml Nesne Dosyalar'da bulunur. Bu tablonun (yaznn balarnda bulunan grafikteki "Linking View" iin) opsiyonel olmas; direk olarak altrlmak iin gereken bilgilerin dosya iinde saklanma ihtiyac duyulmamasndandr, yani Yeniden Konumlandrlabilir dosyalar iin gereksizdir. Program Bal; Nesne Dosya iin bellekte bir sre imaj yaratlabilmesi iin ok nemlidir.

Program Balk Tablosu elemanlar Nesne Dosya iersinde bir Blm'n bilgilerini ieren yada programn almas iin gerekli bilgileri ieren bir yap dizisidir. Burdaki elemanlarn uzunluklar ve ka adet olacaklar bilgisi ELF Balk ksmnda tutulmaktadr (ELF Balk yapsnn e_phentsize ve e_phnum elemanlar). Her eleman; tr, dosya ofseti, fiziksel adres, sanal adres, dosya boyutu, bellee yklenecek program boyutu ve Blm'n program iersindeki sras bilgisini ierir. Program balk yaps aada grlmektedir.

Program Balk yaps
typedef struct {
  Elf32_Word p_type;
  Elf32_Off p_offset;
  Elf32_Addr p_vaddr;
  Elf32_Addr p_paddr;
  Elf32_Word p_filesz;
  Elf32_Word p_memsz;
  Elf32_Word p_flags;
  Elf32_Word p_align;
} Elf32_Phdr;

typedef struct {
  Elf64_Word p_type;
  Elf64_Word p_flags;
  Elf64_Off p_offset;
  Elf64_Addr p_vaddr;
  Elf64_Addr p_paddr;
  Elf64_Xword p_filesz;
  Elf64_Xword p_memsz;
  Elf64_Xword p_align;
} Elf64_Phdr;

p_type Blm'n tip bilgisi tutulur. Deerleri ve anlamlar aada sunulacaktr.
p_offset Dosyada Blm'n ilk bytenn bulunduu yeri belirtir.
p_vaddr Bellekte sanal adresdeki Blm'n ilk byte'nn bulunduu yeri belirtir.
p_paddr Blm'n bellekte bulunduu fiziksel adresdir. Fakat ou sistemde kullanc sreleri (user process) iin fiziksel adrese eriim engeli olduu iin pasifdir.
p_filesz Blm'n dosyadaki byte cinsinden boyutudur. Sfr olabilir.
p_memsz Blm'n bellekteki daki byte cinsinden boyutudur. Sfr olabilir.
p_flags Blm'ler iin tanml baz bayraklar.
p_align

Blm'n bellek ve dosyada olan hizalama gereksinimidir.

Blm'ler bellee direk yerleebilecek ve alabilecek ekilde tasarlanmlardr ve sistem ykleyicisi tarafndan ilenmi ve Program Balk Tablosunda tanmlanmlardr. Her Blm bir veya daha fazla Ksm'dan oluabilirler, yani benzer Ksm'larn bir araya getirilmesi ile oluturulabilirler. Yanlzca okunabilir veri ierebilir, ve dinamik balayc iin sembol ierebilir. rnein text Blm' altrlabilir kodlar, veri Blm' programa ilikin veriler, dinamik Blm ise dinamik ykleme iin eitli bilgilerin grupland Ksm'lar topluluudur. letim Sistemi, eer o anki Blm yklenmeye uygun ise (yapdaki p_type deikeni PT_LOAD'a eitse) bellee yklenecei yer ve bellekte kaplayaca byklk bilgisine gre bellee ykler, baka bir deyile dosya Blm'nn mantksal kopyasn Program Balk Tablosundaki bilgilere gre bir sanal bellek Blm'ne ykler. letim sistemi paylaml bellek kaynaklar olururken de Blm'leri kullanabilir.
Segmen eitleri yapnn p_type eleman ile belirlenir. Bu elemana verilen deerlere gre tipler aada listelenmitir dier deerler ilerisi iin rezerv edilmitir.

Segment Tipleri / p_type
sim Deer Aklama
PT_NULL 0 Bu dizi eleman, kullanm ddr. Yapnn dier yelerinin deerleri tanmszdr. Bu tip, program balk tablosuna, ihmal edilmi (ignore) girileri bulundurabilme imkan, hakk verir.
PT_LOAD 1 Bu dizi eleman, p_filesz ve p_memsz tarafndan tanmlanm bir yklenebilir Blm belirtir. Dosyadan byte'lar bellek Blm'nn balangcna haritalanmtr. Eet Blm'n bellek boyutu (p_memsz) Blm'n dosya boyutundan (p_memsz) byk ise 0 deerini tututma iin ekstra byte'lar tanmlanr ve bunun iin Blm iin hazrlanm alan takip edilir. Dosya boyutu bellek boyutundan byk olmayabilir. Program balk tablosunda yklenebilir Blm girileri p_vaddr yesine gre kkten bye doru sralanm haldedir.
PT_DYNAMIC 2 Bu dizi eleman, dinamik balama ilemleri iin kullanlmaktadr.
PT_INTERP 3 Bu dizi eleman, yorumlayc olarak alacak olan dosyann yolunu (NULL ile sonlandrlm string olarak) ve boyutunu belirler. (rn: *.sh dosyalarnda en stteki #!/bin/sh satrnn..)
PT_NOTE 4 Bu dizi eleman, konum ve yardmc bilgilerin boyutunu tanmlar.
PT_SHLIB 5 Bu Blm tipi rezerv edilmitir ancak tanmsz bir anlama (semantic) sahiptir.
PT_PHDR 6 Bu dizi eleman eer var ise, hem dosyada hemde programn bellek imajnda Program Balk Tablosunun konumunu ve boyutunu kendisi belirler. Bu Blm dosyada birden fazla olmayabilir. Ayrca bu Blm sadece Program Balk Tablosu program bellek imajnn bir paras ise var olabilir. Eer var olmu ise de, btn yklenebilir Blm girilerinden nde olacaktr.
PT_TLS 7 -
PT_LOOS 0x60000000 -
PT_HIOS 0x6FFFFFFF -
PT_LOPROC 0x70000000 Bu aralktaki deerler lemcilere zg semantik'ler iin rezerv edilmitir.
PT_HIPROC 0x7FFFFFFF

NOT: zellikle baka bir yerde gerekmedike bttn Program Balk Blm tipleri opsiyoneldir. Yani, bir dosyann Program Balk Tablosu sadece ierik ile ilgili elementleri barndrabilir.

3.1.1. Not Ksm'

Bazen program veya sistem reticileri tarafndan, bir Nesne Dosyaya baka programlarn; uyumluluk, uygunluk vb. konular iin kontrol edebilecekleri baz zel bilgiler ieren iaretler koyma ihtiyalar doabilir. Ksm tipi SHT_NOTE ve Program Balk eleman tipi PT_NOTE bu ama iin kullanlabilir. Ksm'lar ve Program Balk elemanlarndaki Not Bilgisi herhangi bir sayda girdi tutar. Bu girdilerin her biri allan ilemciye gre 4-byte boyutundaki word'lerden oluan bir dizidir. Aada Not Bilgisi organizasyonu konusunda aklamalar bulunmaktadr, ancak onlar tanmlamann blmlerinden deildirler.

Not Bilgisi

namesz
descsz
type
name
. . .
desc
. . .

sim Aklama
namesz ve name sim Ksm'ndaki ilk namesz byte'lar giriin sahibinin yada balatcnn (originator) "NULL" ile sonlandrlm karakter gsterimlerini ierir. sim atmalarndan kanlmas iin herhangi bir biimsel mekanizma yoktur. Genellikle reticiler tanmlayc aklama olarak kendi isimlerini kullanma eilimindedirler; "ABC Yazilim A.S" gibi. Eer hi bir isim yok ise, namesz 0 ierecektir. Eer tanmlayc iin 4-byte'lk hizalamadan emin olunmas gerekli ise, boluklar doldurma ilemi uygulabilir. lgili doldurma ilemine namesz dahil deildir.
descsz ve desc Desc'de ilk descsz byte'lar Not tanmlaycsn (descriptor) tutar. ELF tanmlayc ierii zerinde herhangi bir kstlma uygulamaz. Eer herhangi bir tanmlayc yok ise, descsz 0 olacaktr. Yine eer Not girii iin 4-byte'lk hizalamadan emin olunmas gerekli ise, boluklar doldurma ilemi uygulabilir ve ilgili doldurma ilemine descsz dahil deildir.
type

Bu kelime tanmlayc ile ilgili yorumu veriri. Her balatc (originator) kendi tipini kontrol eder, tek bir tip deikenin birden ok yorumuda olabilir. Bu ekilde, bir program, anlalmas iin bir tanmlaycnn hem ismini hemde tipini tanmlamaldr. imdilik tipler pozitif olmak zorundadr. ELF tanmlaycnn (descriptor) ne anlama geldiini belirtmez.

Aada rnek Not Blm girileri grlmektedir.

NOT: Sistem Not bilgisini no name (namesz==0) ve sfr uzunluklu name (name[0]=='\0') ile birlikte ayrr ancak u an itibari ile herhangi bir tip tanmlamaz. Btn dier isimler en az bir 'NULL' olmayan karakter barndrmak zorundadrlar.

NOT: Not bilgisi opsiyoneldir. Not bilgisinin olmas programn TIS uyumluluunda bir etki yaratmaz, ayn ekilde verilen bilgiler programn almasnda da bir etki yaratmaz. Ki etkilese beklenmedik hatalar kabilir.

3.2. Program Ykleme lemi

Prgoram ykleme letim Sistemi tarafndan yaplan bir sre imaj oluturma yada bytme ilemidir. Uygulamada, programn baarl sonu almas ve hangi sayfa ynetim (page management) fonksiyonlarnn program iin yrtlecei (handling) ilemi letim Sistemi ve lemci tarafndan kararlatrlr ve yaplr.

3.3. Dinamik Balama

Dinamik balama, sreci balangca hazrlama (process initialization) ve/veya altrma zamannda referanslar zme iemidir. Baz basit mekanizmalar almak iin belirli balama modellerine ihtiya duyarlar ve bu ama iin ELF Ksm'lar ve Balk elemanlar rezerv edilmidir. Gerek Balama Modeli tanmlamas, letim Sistemi ve ugulama ilemi (implementation) tarafndan belirlenir. Bu yzden bu Ksm'larn ierikleri hem letim Sistemi hemde lemciye zgdr.

3.4. Rezerv edilmi simler

Bu blmde letim Sistmi ve lemciye zgn rezerv edilmi isimler listelenmektedir.

3.4.1. zel Ksm simleri

eitli Ksm'lar Program ve Kontrol bilgisi tutarlar. Bunlar aada listelenmitir.

sim
.bss
.comment
.data
.data1
.debug
.dynamic
.dynstr
.dynsym
.fini
.got
.hash
.init
.interp
.line
.note
.plt
.rel name
.rela name
.rodata
.rodata1
.shstrtab
.strtab
.symtab
.text

3.4.2. Dinamik Ksm simleri

_DYNAMIC, Aada dinamik dizi etiketleri listelenmektedir. (d_tag)

sim
DT_NULL
DT_NEEDED
DT_PLTRELSZ
DT_PLTGOT
DT_HASH
DT_STRTAB
DT_SYMTAB
DT_RELA
DT_RELASZ
DT_RELAENT
DT_STRSZ
DT_SYMENT
DT_INIT
DT_FINI
DT_SONAME
DT_RPATH
DT_SYMBOLIC
DT_REL
DT_RELSZ
DT_RELENT
DT_PLTREL
DT_DEBUG
DT_TEXTREL
DT_JMPREL
DT_BIND_NOW
DT_LOPROC
DT_HIPROC

3.4.3. Mecut Uzantlar

Tanmlanm lemcilere dair ELF sabitleri iin belirlenmi bir isimlendirme biimi vardr. DT_, PT_ gibi isimler; ilemciye zel uzantlarn oluturulabilmesi iin lemcinin ismi ile birleirler: rnin DT_M32_SPECIAL. Ancak bu yapy kullanmayan mevcut ilemci uzantlarda desteklenmektedir.

Mevcut Uzantlar
DT_JMP_REL

lemci Mimairleri iin rezerv edilmi Ksm isimleri iin kullanlan kalpta Ksm ismi ksaltmas yerine mimair ismi ksaltmas kullanlr. Bu isim e_machine iin kullanlm olan mimair isimlerinden alnmaldr. rnein .FOO.psect FOO mimarisine ait bir psect Ksm'dr. Var olan son ekler kendi tarihsel isimleri ile anlrlar.

Mevcut Uzantlar
.sdata    .tdesc
.sbss     .lit4
.lit8     .reginfo
.gptab    .liblist
.conflict

Son Sz

Belgenin faydal olmasn umut ediyorum. Eer zaman bulabilirsem belgenin devam niteliinde belgeler hazrlamak istiyorum. Gzden kam hatalar iin zr dilerim ve dzeltmem iin bildirirseniz ok sevinirim. Ayrca desteklerinden dolay, dahil olduum EnderUNIX Takmndaki deerli arkadalarma teekkr ediyorum.

Ekim 2002 (Uzun bir aradan sonra tamamlama : Kasm 2005)
ATILIM BOY
http://www.enderunix.org/aboy | http://www.trunix.org/aboy
aboy at enderunix dot org | aboy at trunix dot org



Szlk

Balama : Linking
Balangca Hazrlama : Initialization
Balatc : Originator
Balk : Header
Bayrak : Flag
Biim : Format
Boluklar Doldurma : Padding
Boyut : Size
Blm : Segment
alma Zaman : Runtime
Derleyici : Compiler
Giri : Entry
Harici : External
Hizalama : Alignment
kili : Binary
Ksm : Section
Ktphane : Library
Nesne : Object
Ofset : Offset
znitelik : Attribute
Paylaml : Shared
Sanal : Virtual
Sre, Sreleme : Process, Processing
Talimat : Instruction
Tanmlayc : Descriptor
Uygulama : Application
Uygulama lemi : Implementation
Veri : Data
Yanlzca okunabilir : read only
Yap : Structure
Yeniden Konumlandrma, Konumlandrlabilir : Relocation, Relocatable
Yorumlayc : Assembler
Ykleyici : Loader

Kaynaklar

Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2
http://www.trunix.org/programlama/os/elf-1.2.pdf | http://www.cs.princeton.edu/courses/archive/fall05/cos217/reading/elf.pdf

Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.1
http://www.trunix.org/programlama/os/elf.txt | http://www.nondot.org/sabre/os/files/Executables/ELF.pdf

System V Application Binary Interface
http://www.trunix.org/programlama/os/sysv-elf/contents.html | http://www.caldera.com/developers/gabi/2000-07-17/contents.html

UNIX ELF File format
http://www.trunix.org/programlama/os/sp13.ppt | http://www.csie.nctu.edu.tw/~shieyuan/course/spb/lectures/sp13.ppt

Extending Sim286 to the Intel386 Architecture with 32-bit processing and ELF Binary input
http://www.trunix.org/programlama/os/cpu-elf/index.html | http://www.cs.ucdavis.edu/~haungs/paper/paper.html

ELF: From The Programmer's Perspective
http://www.trunix.org/programlama/os/elf-hl/Documentation/elf/elf.html | http://www.skyfree.org/linux/references/ELF_Programmer.pdf

The ELF Object File Format: Introduction
http://www.trunix.org/programlama/os/lj_elf_introduction.html | http://www.linuxjournal.com/article/1059

The ELF Object File Format by Dissection
http://www.trunix.org/programlama/os/lj_elf_dissection.html | http://www.linuxjournal.com/article/1060

A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux
http://www.trunix.org/programlama/os/teensy_elf_linux.html | http://www.cs.sunyit.edu/~gloor/reading_room/unix_linux/FoodForThought/teensy.html

Write Your Own Operating System [FAQ]
http://www.trunix.org/programlama/os/os-faq/os-faq.html | http://www.powerdb.org/study/OS/os-faq.html