Сколько секций можно создать в объектном файле?

Я следую курсу Baking Pi – Разработка операционных систем . В ней они создали еще один раздел .init .

Итак, можем ли мы создать столько разделов, сколько хотим (не только .data, .bss, .text ), и можем ли мы поместить код и данные (инициализированные no) в любом из них ?.

Если да, то в чем же суть секций?

  • Linux, GNU GCC, ld, скрипты версий и двоичный формат ELF. Как это работает?
  • Как работает prelink
  • Обнаружить, если бинарник ELF был построен с помощью gprof?
  • Вино: загрузите старое программное обеспечение Access - неверный заголовок ELF
  • Как найти исполняемые типы файлов?
  • Когда исполняемые файлы не дублируются,
  • Почему команда файла говорит, что файлы ELF для Linux 2.6.9?
  • 2 разных libelf.h и libdwarf.h во FreeBSD?
  • 2 Solutions collect form web for “Сколько секций можно создать в объектном файле?”

    Первоначальные исследования

    На первый взгляд кажется, что ответ будет «нет», спецификация для ELF допускает только следующие разделы.

     C32/kernel/bin/.process.o architecture: i386, flags 0x00000011: HAS_RELOC, HAS_SYMS start address 0x00000000 Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000333 00000000 00000000 00000040 2**4 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000050 00000000 00000000 00000380 2**5 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 000003d0 2**2 ALLOC 3 .note 00000014 00000000 00000000 000003d0 2**0 CONTENTS, READONLY 4 .stab 000020e8 00000000 00000000 000003e4 2**2 CONTENTS, RELOC, READONLY, DEBUGGING 5 .stabstr 00008f17 00000000 00000000 000024cc 2**0 CONTENTS, READONLY, DEBUGGING 6 .rodata 000001e4 00000000 00000000 0000b400 2**5 CONTENTS, ALLOC, LOAD, READONLY, DATA 7 .comment 00000023 00000000 00000000 0000b5e4 2**0 CONTENTS, READONLY 

    Источник: http://wiki.osdev.org/ELF

    Другие источники, такие как Википедия, также показывают только самые основные названия разделов, заставляя вас думать, что это все, что разрешено. Дополнительный поиск показал, что есть и эти 2 секции:

    .fini

    В этом разделе содержатся исполняемые инструкции, которые вносят вклад в код завершения процесса. То есть, когда программа завершается нормально, система организует выполнение кода в этом разделе.

    .в этом

    В этом разделе содержатся исполняемые инструкции, которые вносят вклад в код инициализации процесса. То есть, когда программа начинает работать, система организует выполнение кода в этом разделе перед основной точкой ввода программы (называемой main в программах на C).

    .init и .fini имеют особое назначение. Если функция помещена в секцию .init , система выполнит ее перед основной функцией. Также функции, помещенные в секцию .fini будут выполняться системой после возвращения основной функции. Эта функция используется компиляторами для реализации глобальных конструкторов и деструкторов в C ++.

    Источник: http://l4u-00.jinr.ru/usoft/WWW/www_debian.org/Documentation/elf/node3.html

    Но, да, вы можете иметь любые разделы

    Но благодаря @AProgrammer, указав мне на фактическую спецификацию ELF v1.2 , на странице 1-16 есть параграф, который гласит следующее:

    Названия разделов с префиксом точки (.) Зарезервированы для системы, хотя приложения могут использовать эти разделы, если их существующие значения являются удовлетворительными. Приложения могут использовать имена без префикса, чтобы избежать конфликтов с разделами системы. Формат объектного файла позволяет определить разделы, не перечисленные выше. Объектный файл может иметь более одного раздела с тем же именем.

    Таким образом, похоже, что полностью зависит от того, какие разделы он хочет использовать.

    То, что разрешено, поскольку имена разделов и разделов зависят от формата файла. Для ELF определение формата определяет кучу и их назначение, а затем говорит:

    Названия разделов с префиксом точки (.) Зарезервированы для системы, хотя приложения могут использовать эти разделы, если их существующие значения являются удовлетворительными. Приложения могут использовать имена без префикса, чтобы избежать конфликтов с разделами системы. Формат объектного файла позволяет определить разделы, не перечисленные выше. Объектный файл может иметь более одного раздела с тем же именем.

    Итак, да, вы можете создавать разделы с любым именем, которое вы хотите, то, как система будет обрабатывать их, определяется их типами и атрибутами.

    Interesting Posts

    Как удалить оставшиеся файлы удаленного пользователя?

    Автозаполнение zsh для символических ссылок

    Как изменить размер раздела LVM в начале

    несоответствие между путями для двоичной и служебной страницы

    Можете ли вы установить переменные среды, которые каждый процесс будет выполняться в Linux?

    файлов больше среднего размера каталога?

    В FreeBSD, как вы отправляете почтовое сообщение от пользователя на одном сервере пользователю на другом сервере?

    display sco unix 5.0.6 использование samba

    Как остановить g ++ ссылку / включая старые системные заголовки / библиотеки из / usr / *?

    Как загрузить все изображения размером> 100 КБ на веб-странице?

    Экран gnu: автоматическая сессия по split

    SSH Не подключаться даже с установленными публикациями

    Где измеряется время Unix / официальное время?

    Обнаружение устройства криптоподъема

    Диспетчер файлов Ranger – открыть gnome-терминал вместо xterm

    Linux и Unix - лучшая ОС в мире.