Сколько разделов я могу создать в объектном файле?

drwx------. 11 hadoop hadoop    4096 Oct 30 13:51 ..

Я предполагаю, что это - Ваш $HOME. Затем это - причина. Так или иначе узнайте о полномочиях Unix и ACL, он помог бы Вам.

2
05.06.2014, 01:10
2 ответа

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

На первый взгляд может показаться, что ответ будет «нет», спецификация для 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

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

.init

В этом разделе содержатся исполняемые инструкции, которые вносят вклад в код инициализации процесса. То есть, когда программа начинает работать, система выполняет код в этом разделе до точки входа в основную программу (называемую 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 есть параграф, в котором говорится следующее:

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

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

4
27.01.2020, 21:52

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

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

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

3
27.01.2020, 21:52

Теги

Похожие вопросы