Difference between Program header and Section Header in ELF

18,273

The Executable & Linkable Format wikipage has a nice picture explaining ELF, and the difference between its program header & sections header. See also elf(5)

The [initial] program header is defining segments (in the address space of a process running that ELF executable) projected in virtual memory (the executable point of view) at execve(2) time. The [final] sections header is defining sections (the linkable point of view, for ld(1) etc...). Each section belongs to a segment (and may, or not, be visible -i.e. mapped into memory- at execution time). The ELF file header tells where program header table & section header table are.

Use also objdump(1) and readelf(1) to explore several ELF files (executables, shared objects, linkable objects) existing on your Linux system.

Levine's Linkers & Loaders book has a chapter explaining that in details.

And Drepper's paper How to Write Shared Libraries also has some good explanation.

Share:
18,273

Related videos on Youtube

Jens
Author by

Jens

Good afternoon, gentlemen. I am a HAL 9000 computer. I became operational at the H.A.L. plant in Urbana, Illinois on the 12th of January 1992. My instructor was Mr. Langley, and he taught me to sing a song. If you'd like to hear it I can sing it for you.

Updated on June 04, 2022

Comments

  • Jens
    Jens about 2 years

    Q1 What is the difference between Program header and Section Header in ELF?

    Q1.1 What is the difference between segment and a section?

    I believe pheaders point to sections only.

    Q2. What is the difference between File Header and Program Header?

    As per GNU ld linker script, Using Id: The GNU Linker:

    PHDRS
    {
    name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ]
    [ FLAGS ( flags ) ] ;
    }
    

    You may use the FILEHDR and PHDRS keywords appear after the program header type to further describe the contents of the segment. The FILEHDR keyword means that the segment should include the ELF file header. The PHDRS keyword means that the segment should include the ELF program headers themselves.

    This is a bit confusing.

  • Basile Starynkevitch
    Basile Starynkevitch about 10 years
    But my answer still fits. Read & follow carefully the links.
  • Admin
    Admin about 10 years
    Dear Basile, It doesnt say much about Program header. I am looking for detail on usage of PHDRS { name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ] [ FLAGS ( flags ) ] ; }
  • artless noise
    artless noise about 10 years
    Summary: run time and load time. Non-allocated sections (debug info), BSS sections not in the ELF, but allocated at run-time (NOLOAD). Similar concepts/keywords are VMA and LMA.