Каково использование секции 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.

Из вышеизложенного этот первый раздел, судя по всему, существует, чтобы обеспечить кодирование большого количества разделов, но я не тестировал поддержку ядра и компилятора.