Почему файл исполняемого и связываемого формата (ELF) содержит набор разделов?

В настоящее время я имею в виду системные вызовы обработки файлов в Linux.

Кроме того, я понял, что ELF, который является исполняемым и связываемым форматом, содержит набор разделов.

Это .bss , .data , .rodata , .text , .comment и неизвестно

Я сослался на Википедию и этот Веб-сайт для изучения

Итак, у меня есть вопросы ниже

почему файл ELF использует набор разделов?

какова задача каждого из вышеперечисленных разделов?

какова возможность этого с использованием набора разделов?


person Kelum    schedule 29.12.2013    source источник


Ответы (1)


Хорошим справочником по формату файлов ELF является глава "Объектные файлы" System V ABI< /а>. В частности, специальные разделы описывают использование большинства разделы, с которыми вы, вероятно, столкнетесь.

почему файл ELF использует набор разделов?

Объектный файл содержит множество различных классов данных, и имеет смысл сгруппировать похожие данные в разделы, тем более что содержимое некоторых разделов может быть считано непосредственно в образ процесса, когда ОС запускает ELF-файл.

  • .bss содержит неинициализированные данные, такие как int a;, объявленные на глобальном уровне в программе C. На самом деле он не содержит ничего, кроме размера, который нужно выделить при загрузке ELF-файла в процесс, потому что все переменные в bss инициализированы 0.
  • .data содержит инициализированные данные, такие как int a = 1000;, объявленные на глобальном уровне в программе C.
  • .rodata содержит данные только для чтения, такие как литералы строк символов и глобальные переменные уровня, объявленные как const в C. Когда ОС выполняет файл ELF, она загружает этот раздел в область памяти, доступную только для чтения.
  • .text содержит исполняемые инструкции. Когда ОС выполняет ELF-файл, она загружает этот раздел в область памяти, доступную только для чтения. Иногда .text и .rodata загружаются в одну и ту же область памяти процесса.
  • .comment обычно содержит имя и версию компилятора(ов), использованного для создания файла.

Не все разделы, описанные в документации, могут присутствовать во всех файлах ELF; в частности, запуск команды strip в файле ELF удалит разделы .symtab и .debug.

person Mark Plotnick    schedule 29.12.2013