Oto naprawdę dobra referencja: http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/ . Zawiera bibliografię na końcu różnych odnośników na różnych poziomach. Jeśli chcesz poznać każdy krwawy szczegół, możesz przejść bezpośrednio do źródła: http://www.akkadia.org/drepper/dsohowto.pdf . (Ulrich Drepper napisał linker dynamiczny dla systemu Linux).
Możesz uzyskać naprawdę dobry przegląd wszystkich sekcji pliku wykonywalnego, uruchamiając polecenie takie jak „objdump -h myexe” lub „readelf -S myexe”.
Sekcja .interp zawiera nazwę programu ładującego dynamicznie, który będzie używany do dynamicznego łączenia symboli w tym obiekcie. Sekcja .dynamic jest destylacją nagłówka programu, który jest sformatowany tak, aby był łatwy do odczytania przez moduł ładujący dynamiczny. (Ma więc wskaźniki do wszystkich innych sekcji).
.Got (Global Offset Table) i .plt (Procedura łączenia tabel) to dwie główne struktury, którymi manipuluje dynamiczny linker. .Got jest tabelą pośrednią dla zmiennych, a .plt jest tabelą pośrednią dla funkcji. Każdy plik wykonywalny lub biblioteka (zwane „obiektami współdzielonymi”) ma własne .got i .plt i są to tabele symboli, do których odwołuje się ten obiekt współdzielony, które są faktycznie zawarte w innym obiekcie współdzielonym.
Plik .dynsyn zawiera wszystkie informacje na temat symboli w twoim współdzielonym obiekcie (zarówno tych zdefiniowanych przez ciebie, jak i zewnętrznych, do których musisz się odwoływać.) .Dynsyn nie zawiera rzeczywistych nazw symboli. Są one zawarte w .dynstr, a .dynsyn ma wskaźniki na .dynstr. .gnu.hash to tablica skrótów służąca do szybkiego wyszukiwania symboli według nazwy. Zawiera także tylko wskaźniki (wskaźniki do .dynstr i wskaźniki używane do tworzenia łańcuchów kubełkowych).
Gdy obiekt współdzielony odsuwa się od jakiegoś symbolu „foo”, dynamiczny linker musi przejść do wyszukiwania „foo” we wszystkich dynamicznych obiektach, z którymi jesteś połączony, aby dowiedzieć się, który z nich zawiera „foo”, którego szukasz (a następnie jaki krewny adres „foo” znajduje się w tym współdzielonym obiekcie.) Dynamiczny linker dokonuje tego, przeszukując sekcję .gnu.hash wszystkich połączonych obiektów współdzielonych (lub sekcję .hash w poszukiwaniu starych obiektów współdzielonych, które nie mają .gnu. sekcja skrótu.) Po znalezieniu poprawnego adresu w połączonym obiekcie współdzielonym umieszcza go w pliku .got lub .plt obiektu udostępnionego.