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

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

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

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

  • Как найти исполняемые типы файлов?
  • Как заставить мой ELF работать как с новой, так и с старой версией glibc?
  • Linux, GNU GCC, ld, скрипты версий и двоичный формат ELF. Как это работает?
  • Процесс загрузки Unix / Linux
  • Исполняемый формат в OS X vs Исполняемый формат во FreeBSD
  • В чем разница между readelf и eu-readelf?
  • 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

    Как начать сеанс удаленной командной строки?

    Мне нужно взять вывод команды и сделать ее именем файла, используя скрипт

    Обращение содержимого переменной словами

    Найти и удалить все временные файлы в каталоге пользователя

    Точка доступа Linux (airmon-ng / airmon-ng) не работает

    Значение символов «-» и «+» при завершении фоновых процессов?

    На Arch, как вы можете установить WM для начала при загрузке?

    Инструмент сетевого мониторинга для Linux

    Нужно ли мне пространство подкачки, если у меня более чем достаточное количество оперативной памяти?

    Сохранить кешированное видео на firefox?

    CentOS 6 – Порядок сетевых интерфейсов при запуске команды «ip address show»

    Почему диапазон нагрузки не равен 0-1 + для всех процессоров вместе?

    Как смонтировать удаленный каталог sshfs на общедоступном сервере на недоступном клиентском компьютере?

    У меня есть несколько python на моем компьютере? и как удалить один из них?

    Почему мой / домашний partiton не получает автоматическую настройку?

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