Globální ofsetová tabulka - Global Offset Table

The Globální ofsetová tabulkanebo MÁM, je část a počítačový program Paměť (spustitelné soubory a sdílené knihovny) používaná k povolení kódu počítačového programu kompilovaného jako soubor ELF soubor do běh správně, nezávislý adresy paměti, kde kód programu nebo data jsou načten za běhu.[1]

Mapuje to symboly v programovacím kódu na jejich odpovídající absolutní adresy paměti umožnit Nezávislý kód pozice (PIC) and Position Independent Executables (PIE)[2] které jsou načteny[3] do a jinou adresu paměti při každém spuštění programu. Adresa runtime paměti, známá také jako absolutní adresa paměti proměnných a funkcí, není známa před spuštěním programu při spuštění kódu PIC nebo PIE[4] takže nemůže být napevno během kompilace a překladač.

Globální offsetová tabulka je reprezentována jako sekce .got a .got.plt v souboru ELF[5] které se načtou do paměti programu při spuštění.[5][6] Operační systém dynamický linker se používá k aktualizaci globální offsetové tabulky přemístění (symbol na absolutní adresy paměti) při spuštění programu nebo jako symboly jsou přístupné.[7]Je to mechanismus, který umožňuje sdílené knihovny (.so) být přemístěn na jinou adresu paměti při spuštění a vyhnout se konfliktům adres paměti s hlavním programem nebo jinými sdílenými knihovnami a ztvrdnout kód počítačového programu z vykořisťování.[8]

Reference

  1. ^ „Dynamické propojení“. refspecs.linuxfoundation.org.
  2. ^ "Možnosti genového kódu (pomocí kolekce kompilátorů GNU)". gcc.gnu.org.
  3. ^ „Jak běží programy: binární soubory ELF [LWN.net]“. lwn.net.
  4. ^ „Globální ofsetové tabulky“. bottomupcs.sourceforge.net.
  5. ^ A b „Spustitelný a spojitelný formát (ELF)“. stevens.netmeister.org.
  6. ^ Wienand, Ian (10. května 2011). „PLT a GOT - klíč ke sdílení kódu a dynamickým knihovnám“. Technologická novinka. Citováno 14. dubna 2020.
  7. ^ Aichinger, Christian. „Formát ELF - jak programy vypadají zevnitř“. Myšlenky Christiana Aichingera.
  8. ^ Sidhpurwala, Huzaifa (28. ledna 2018). „Kalení binárních souborů ELF pomocí přemístění jen pro čtení (RELRO)“. červená čepice.