LSB 5 запрещает одновременное использование разделов SHT_DYNSYM и SHT_SYMTAB?

Я читаю файлы ELF из спецификаций System V ABI и Linux Standard Base. Что касается разделов таблицы символов, System V говорит:

В настоящее время объектный файл может иметь только один раздел каждого типа, но в будущем это ограничение может быть смягчено. Обычно SHT_SYMTAB предоставляет символы для редактирования ссылок, хотя его также можно использовать для динамического связывания. Будучи полной таблицей символов, она может содержать множество символов, ненужных для динамического связывания. Следовательно, объектный файл также может содержать раздел SHT_DYNSYM, который содержит минимальный набор символов динамической компоновки для экономии места.

Хотя LSB, кажется, явно запрещает это

В настоящее время объектный файл может иметь либо раздел типа SHT_SYMTAB, либо раздел типа SHT_DYNSYM, но не то и другое.В будущем это ограничение может быть смягчено. Обычно SHT_SYMTAB предоставляет символы для редактирования ссылок, хотя его также можно использовать для динамического связывания. Будучи полной таблицей символов, она может содержать множество символов, ненужных для динамического связывания.

Итак, те части, которые я выделил жирным шрифтом, прямо противоречат друг другу. В то же время части, которые я выделил курсивом, являются дословной копией друг друга, что заставляет меня подозревать, что LSB мог допустить ошибку (т. е. выделенную жирным шрифтом часть) при копировании из System V?

Отсюда мой вопрос: какой из них правильный? Может ли объектный файл иметь оба раздела одновременно в Linux?

1 ответ

Текст, на который вы ссылаетесь, похоже, взят отсюда.

Это также кажется полной фальшивкой: для ELF (общего) объекта исключительно характерно наличие обоихSHT_SYMTAB и SHT_DYNSYMразделы одновременно. Пример:

      echo "int foo() { return 42; }" | gcc -xc - -fPIC -shared -o foo.so
readelf -WS foo.so | egrep 'SYMTAB|DYNSYM'

  [ 3] .dynsym           DYNSYM          0000000000000288 000288 000090 18   A  4   1  8
  [21] .symtab           SYMTAB          0000000000000000 003028 000258 18     22  20  8
Другие вопросы по тегам