Каково использование секции SHT_NULL в ELF?
- Какова цель раздела
SHT_NULL
в ELF
?
- На это ссылается ОС или загрузчик?
- Каков размер этого раздела?
- Это имеет какое-либо отношение к указателю NULL?
- Кроме того, почему этот раздел не имеет записи в отображении сегментов сегмента?
Из спецификации ELF:
SHT_NULL
: это значение отмечает заголовок раздела как неактивный; у него нет связанного раздела. Другие члены заголовка секции имеют значения undefined.
Ответы
Ответ 1
Какова цель секции SHT_NULL в эльфе?
Он служит sentinel.
Относится ли эта ссылка к операционной системе или загрузчику?
Нет.
Каков размер этого раздела?
Zero (вы можете видеть это в выводе readelf -WS a.out
) [но см. ниже].
почему этот раздел не имеет записи в отображении сегментов сегментов?
Поскольку этот раздел отсутствует в любом сегменте.
Обычно самый первый раздел в каждом файле ELF имеет тип SHT_NULL
. Теоретически инструмент post-link может также установить тип какого-либо другого раздела в SHT_NULL
(например, если его данные больше не нужны), и все последующие инструменты должны игнорировать этот раздел. Это не часто.
Ответ 2
Одно "использование" SHT_NULL
заключается в том, что оно является обязательным для первой записи таблицы заголовка (индекс 0, с именем SHN_UNDEF
), которая является магической.
Это описано в System V ABI Update (рекомендуется с помощью LSB):
Если количество секций больше или равно SHN_LORESERVE (0xff00), e_shnum имеет значение SHN_UNDEF (0), а фактическое количество записей таблицы заголовков разделов содержится в поле sh_size заголовка раздела с индексом 0 ( в противном случае член sh_size начальной записи содержит 0).
и
Остальные значения типа раздела зарезервированы. Как упоминалось ранее, заголовок раздела для индекса 0 (SHN_UNDEF) существует, хотя индекс отмечает ссылки раздела undefined. Эта запись содержит следующее.
а затем таблица, в которой указывается, что каждая запись заголовка раздела означает в этом специальном случае. В частности, sh_type
должен быть SHT_NULL
.
Из вышеизложенного этот первый раздел, судя по всему, существует, чтобы обеспечить кодирование большого количества разделов, но я не тестировал поддержку ядра и компилятора.