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