Разница между заголовком программы и заголовком раздела в ELF

Q1 Какая разница между заголовком программы и заголовком раздела в ELF

Q1.1 В чем разница между сегментом и секцией?

Я считаю, что pheaders указывают только на разделы.

Q2. В чем разница между - заголовком файла и заголовком программы

В соответствии с gnu ld linker script, Использование Id: GNU Linker:

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

Вы можете использовать ключевые слова FILEHDR и PHDRS после заголовка заголовка программы для дальнейшего описать содержимое сегмента. Ключевое слово FILEHDR означает, что сегмент должен включать заголовок ELF le. Ключевое слово PHDRS означает, что сегмент должен включать в себя программу ELF сами заголовки

This is a bit confusing

Ответ 1

Исполняемый и связанный формат wikipage имеет приятное изображение, объясняющее ELF, а также разницу между заголовком заголовка программы и разделами. См. Также эльф (5)

Заголовок [initial] программы определяет сегменты (в адресном пространстве process, выполняющий этот исполняемый файл ELF), запроектированный в виртуальной памяти (исполняемая точка зрения) в execve (2) время. Заголовок [final] разделяет определяющие разделы (с точки зрения привязки, для ld (1) и т.д.). Каждый раздел относится к сегменту (и может, или нет, быть видимым - т.е. отображен в память - во время выполнения). Заголовок файла ELF сообщает, где таблица заголовка программы и таблица заголовков разделов.

Используйте также objdump (1) и readelf (1) изучить несколько файлов ELF (исполняемые файлы, общие объекты, связующие объекты), существующие в вашей системе Linux.

Левин Ссылки и загрузчики в книге есть глава, подробно объясняющая это.

И бумага Drepper Как писать общие библиотеки также имеет хорошее объяснение.