2015-05-05 4 views
0

Я надеялся, что каждый динамически связана ELF двоичный имеетELF исполняемых файлы: требуется информация о версии для импортируемых символов

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

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

Ближайшие заявления я мог бы найти было в Linux Standard Base Core Specification 3.1

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

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

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

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

Является ли моя интерпретация правильной?

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

ответ

1

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

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

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

Информация о версии факультативно.

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

Au contraire. Компилятор/компоновщик do не включает информацию о версии, если программист не говорит им, и это не очень часто встречается вне GLIBC.

Смежные вопросы