• executable file'larda tutulan ve binary image icindeki absolute address referanslarinin bir listesi duran, operating system'in exe'yi yukledigi adreste cali$ir hale getirmesini saglayan bir nevi translation table..

    dos exe'lerinde icinde segment:offset degerleri bulunur.. bu segment, ,load base segment'e eklenir ve o offset icindeki word degeri load base segment kadar arttirilir.. (ben de yazdigimdan bi$ii anlamadim ama oyle)
  • yalnızca çalıştırılabilir* dosyalarda değil, assembler çıktısı olan amaç dosyalar* içerisinde tutulması flat memory model'e göre elzem olan tablo. bağlama* aşamasında linker bu tabloyu kullanarak çalıştırılabilir dosyadaki makine kodlarının ve verilerin loader tarafından yükleneceği ilgili process'in bellek alanındaki sanal adreslere offset tabanlı eşleştirme yapar. dolayısıyla esasında üzerinden adres eşleştirmesi yapılan bir pointer tablosudur. bağlama aşaması sonrasında bu tablo çalıştırılabilir dosya içerisinde tutulmaya devam edilebilir, lakin çok da lüzumlu değildir. zira linker relocation işlemini çoktan gerçekleştirmiş ve programın yükleneceği sanal bellek adreslerini dosya içerisinde ayarlamıştır. söz gelimi, unix sistemlerdeki (bkz: strip/@phreak) gibi bir kabuk* programı kullanılarak, çalıştırılabilir dosyanın boyutunu küçültmek maksadıyla symbol table/relocation table kaldırılabilir. fakat aynı işlem dinamik kütüphane* dosyalarına uygulanırsa, kütüphanenin yüklenmesi esnasında çalışmakta olan ilgili process'in sanal hafıza alanı içerisinde hangi adres aralığının o an için uygun olduğu önceden bilinemeyeceği için loader sıçar, segmentation fault'u bir güzel eline alır. bu yüzden dinamik kütüphane dosyaları veya daha genel adıyla shared object dosyalar position independent code olacak biçimde derlenir ki dinamik bağlama* aşamasında o an için hafızada uygun olan sanal adres bölgesine yüklenebilsin. uzun lafın kısası, bazen herkese lazım olabiliyor böyle sanatsal kaygılardan uzak tablolar. bak bak doyamazsın, öyle bir tablo...
  • diskteki bir dosya belleğe yüklenirken, loader öncelikle headerları parse eder, dosyanın çalıştırılabilir olup olmadığına bakar. daha sonra image için ayırılan bellek bölgesine headerları kopyalar, ayırılan bellek bölgesinin ilk adresi ile headerlarda belirtilen varsayılan başlangıç adresinin farkını alır.

    delta = imagebase - preferredbaseaddress

    işte bu noktada relocation table devreye girer, linker bu dosyanın "varsayılan" adrese yükleneceğini öngörerek adresleri programa yerleştirse de, günümüz sistemlerinde bu pek de mümkün değildir. dolayısıyla bu adreslerin tutulduğu relocation table üzerinden bütün referanslara erişilir ve yukarıda hesapladığımız delta değeri yardımıyla "relocation fixup" yapılır.

    windows, 9 farklı sistem için yaklaşık 200 farklı relocation türüne sahiptir.
hesabın var mı? giriş yap