Search code examples
compiler-constructionelfreadelf

Where is the "Section to segment mapping" stored in ELF files?


As part of trying to write a compiler completely from scratch, I'm currently working on the part the handles ELF files.

After skimming through several articles and specifications about them, I still don't quite understand where section to segment mappings are stored. When observing small executables generated by NASM+ld, I can see that the .text section is somehow mapped onto a LOAD-type program header, but how?

A small piece of readelf's output when given a small (working) executable as input:

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x0000000000000084 0x0000000000000084  R E    200000

 Section to Segment mapping:
  Segment Sections...
   00     .text 

Is this mapping even required to have a working executable? Or can they be omitted completely and you would still have a valid executable?


Solution

  • I still don't quite understand where section to segment mappings are stored.

    They are not stored anywhere.

    Rather, readelf computes the mapping by looking at file offset and size of sections and segments.