Każda sekcja ma typ, oznaczony przez pole całkowite o nazwie sh_type, które mówi linkerowi coś o strukturze zawartości sekcji.
Sekcje z typem SHT_PROGBITS zawierają dane programu, takie jak instrukcje maszynowe lub stałe. Te sekcje nie mają żadnej szczególnej struktury, którą linker mógłby przeanalizować. Istnieją również specjalne typy sekcji dla tabel symboli (SHT_SYMTAB dla statycznych tabel symboli i SHT_DYNSYM dla tabel symboli używanych przez dynamiczny linker) i tabele ciągów (SHT_STRTAB). Tabele symboli zawierają symbole w dobrze zdefiniowanym formacie (struct Elf64_Sym w elf.h, jeśli jesteś zainteresowany), który opisuje między innymi symboliczną nazwę i typ dla konkretnych przesunięć lub adresów plików. Statyczna tabela symboli może nie być obecna, jeśli na przykład plik binarny zostanie usunięty. Tabele ciągów, jak już wspomniano, zawierają po prostu tablicę ciągów zakończonych wartością NULL, przy czym pierwszy bajt w tabeli ciągów jest ustawiony na NULL zgodnie z konwencją. Sekcje typu SHT_REL lub SHT_RELA są szczególnie ważne dla linkera, ponieważ zawierają wpisy relokacji w dobrze zdefiniowanym formacie (struct Elf64_Rel i struct Elf64_Rela w elf.h), które linker może przeanalizować, aby wykonać niezbędne relokacje w innych sekcjach. Każdy wpis relokacji informuje linkera o konkretnej lokalizacji w pliku binarnym, w której potrzebna jest relokacja, i o symbolu, do którego relokacja powinna zostać rozwiązana. Sam proces relokacji jest dość skomplikowany i nie będę teraz wchodził w szczegóły. Ważne jest, aby sekcje SHT_REL i SHT_RELA były używane do celów łączenia statycznego. Sekcje typu SHT_DYNAMIC zawierają informacje potrzebne do dynamicznego łączenia. Informacje te są formatowane przy użyciu struct Elf64_Dyn, jak określono w elf.h.