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 изисква символи или не.

Ако го разбирам правилно, това казва, че е възможно да се създават споделени обекти без информация за версията за открит символ. И по този начин може да има препратки към тези символи без задължителна информация за версията.

Моето тълкуване правилно ли е?

Тези случаи обаче трябва да са редки, тъй като защо компилаторът/линкерът не включва информация за версията?


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


Отговори (1)


Ако го разбирам правилно, това казва, че е възможно да се създават споделени обекти без информация за версията за открит символ.

Правилно. Споделените библиотеки предхождат въвеждането на версионни символи с около 10 години. Символите с версии са разширение на GNU/GLIBC.

И по този начин може да има препратки към тези символи без необходимата информация за версията.

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

Тези случаи обаче трябва да са редки, тъй като защо компилаторът/линкерът не включва информация за версията?

Напротив. Компилаторът/линкерът не включва информация за версията, освен ако програмист не им каже, а това не е много обичайно извън GLIBC.

person Employed Russian    schedule 11.05.2015