Исполняемые файлы ELF: необходимая информация о версии для импортированных символов

Я надеялся, что каждый динамически связанный двоичный файл ELF имеет

  1. раздел .gnu.version_r (или другой раздел с тегом DT_VERNEED), и что
  2. этот раздел содержит необходимую версию для каждого символа, импортированного из динамически связанного общего объекта.

Тем не менее, похоже, возможны случаи, когда компилятор / компоновщик добавляет запись DT_NEEDED (то есть встраивает имя требуемого общего объекта) без какой-либо требуемой информации о версии.

Ближайшие утверждения, которые я смог найти, были в Стандартная базовая базовая спецификация ядра Linux 3.1

Все объекты ELF могут предоставлять или зависеть от версионных символов.

и, немного точнее, в http://www.akkadia.org/drepper/symbol-versioning:

Реализация позволяет каждому DSO либо использовать версии для своих символов, либо нет. В зависимости от того, имеет ли объект DSO, с которым связан объект, символы или нет, ссылка на DSO требует символов или нет.

Если я правильно понимаю, это говорит о том, что можно создавать общие объекты без информации о версии для открытого символа. Таким образом, могут быть ссылки на эти символы без обязательной информации о версии.

Моя интерпретация верна?

Однако эти случаи должны быть редкими, поскольку почему компилятор / компоновщик не включает информацию о версии?


person gogo_gorilla    schedule 05.05.2015    source источник


Ответы (1)


Если я правильно понимаю, это говорит о том, что можно создавать общие объекты без информации о версии для открытого символа.

Правильный. Общие библиотеки предшествовали появлению версионных символов примерно на 10 лет. Версионные символы являются расширением GNU / GLIBC.

Таким образом, могут быть ссылки на эти символы без обязательной информации о версии.

Информация о версии является необязательной.

Однако эти случаи должны быть редкими, поскольку почему компилятор / компоновщик не включает информацию о версии?

Наоборот. Компилятор / компоновщик не включает информацию о версии, если программист не говорит им об этом, а это не очень распространено за пределами GLIBC.

person Employed Russian    schedule 11.05.2015