LINUX.ORG.RU

История изменений

Исправление dimgel, (текущая версия) :

Насколько я знаю, ldd ищет зависимости рекурсивно

Да. А я собираю по файловой системе все динамические ELF и каждый анализирую независимо от остальных; и ошибка вылетит при анализе не приложения, а конкретно той либы, чья непосредственная зависимость отсутствует. Что есть гуд: не «какая-то либа у данной программы битая», а «такая-то конкретно либа из такого-то пакета битая» – и не важно, линкует ли её кто-то явно, грузит через dlopen() или не использует вообще.

А ещё бывают же либы, которые грузятся через dlopen, што с ними делать?

Это уже написал выше, и кстати это ерунда по сравнению с тем, что на системе огромное количество ELF-ов с локальными символами, которые на самом деле нифига не локальные, а импортируются либами, подгружаемыми через dlopen как плагины. Например, /usr/lib/Xorg (который вообще не либа, строго говоря; file его определяет как executable) экспортирует кучу символов которые импортируются x11-драйверами. (А некоторые импортируемые драйверами символы не экспортирует никто вообще. Щас я примерно представляю, куда смотреть, чтобы понять как такое чудо возможно, но вернусь туда в лучшем случае через неделю.) Где-то 12% всех символов – такие вот «локальные», но в DYNSYM фигурирующие. И если включить их в поиск-резолвинг, то придётся в конфиг в дополнение к десятку директив addLibPath впилить сотню директив addLib, потратив массу времени, чтобы найти какие либы какие символы экспортируют:

addLib /usr/lib/xorg/modules/** /usr/lib/Xorg
addLib /usr/lib/perl5/5.34/site_perl/** /usr/lib/perl5/5.34/core_perl/CORE/libperl.so
addLib /usr/lib/perl5/5.34/vendor_perl/** /usr/lib/perl5/5.34/core_perl/CORE/libperl.so
# И ещё под сотню строк.

Так что, очевидно, я пойду по принципу «лучше хоть что-то чем ничего вообще» и локальные символы буду игнорить; даже для гентушника-задрота это перебор.

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

Ну, это уже на полноценный линкер тянет xD

Изо всех сил стараюсь избежать настолько глубокого изучения, но весь мой предыдущий жизненный опыт показывает, что тем всё и закончится. Никогда на костылях не получалось до финиша доезжать. Ну авось, всё ж когда-то происходит впервые.

Исправление dimgel, :

Насколько я знаю, ldd ищет зависимости рекурсивно

Да. А я собираю по файловой системе все динамические ELF и каждый анализирую независимо от остальных; и ошибка вылетит при анализе не приложения, а конкретно той либы, чья непосредственная зависимость отсутствует. Что есть гуд: не «какая-то либа у данной программы битая», а «такая-то конкретно либа из такого-то пакета битая» – и не важно, линкует ли её кто-то явно, грузит через dlopen() или не использует вообще.

А ещё бывают же либы, которые грузятся через dlopen, што с ними делать?

Это уже написал выше, и кстати это ерунда по сравнению с тем, что на системе огромное количество ELF-ов с локальными символами, которые на самом деле нифига не локальные, а импортируются либами, подгружаемыми через dlopen как плагины. Например, /usr/lib/Xorg (который вообще не либа, строго говоря; file его определяет как executable) экспортирует кучу символов которые импортируются x11-драйверами. (А некоторые импортируемые драйверами символы не экспортирует никто вообще. Щас я примерно представляю, куда смотреть, чтобы понять как такое чудо возможно, но вернусь туда в лучшем случае через неделю.) Где-то 12% всех символов – такие вот «локальные», но в DYNSYM фигурирующие. И если включить их в поиск-резолвинг, то придётся в конфиг в дополнение к десятку директив addLibPath впилить сотню директив addLib, потратив массу времени, чтобы найти какие либы какие символы экспортируют:

/usr/lib/xorg/modules/** /usr/lib/Xorg
/usr/lib/perl5/5.34/site_perl/** /usr/lib/perl5/5.34/core_perl/CORE/libperl.so
/usr/lib/perl5/5.34/vendor_perl/** /usr/lib/perl5/5.34/core_perl/CORE/libperl.so
# И ещё под сотню строк.

Так что, очевидно, я пойду по принципу «лучше хоть что-то чем ничего вообще» и локальные символы буду игнорить; даже для гентушника-задрота это перебор.

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

Ну, это уже на полноценный линкер тянет xD

Изо всех сил стараюсь избежать настолько глубокого изучения, но весь мой предыдущий жизненный опыт показывает, что тем всё и закончится. Никогда на костылях не получалось до финиша доезжать. Ну авось, всё ж когда-то происходит впервые.

Исправление dimgel, :

Насколько я знаю, ldd ищет зависимости рекурсивно

Да. А я собираю по файловой системе все динамические ELF и каждый анализирую независимо от остальных; и ошибка вылетит при анализе не приложения, а конкретно той либы, чья непосредственная зависимость отсутствует. Что есть гуд: не «какая-то либа у данной программы битая», а «такая-то конкретно либа из такого-то пакета битая» – и не важно, линкует ли её кто-то явно, грузит через dlopen() или не использует вообще.

А ещё бывают же либы, которые грузятся через dlopen, што с ними делать?

Это уже написал выше, и кстати это ерунда по сравнению с тем, что на системе огромное количество ELF-ов с локальными символами, которые на самом деле нифига не локальные, а импортируются либами, подгружаемыми через dlopen как плагины. Например, /usr/lib/Xorg (который вообще не либа, строго говоря; file его определяет как executable) экспортирует кучу символов которые импортируются x11-драйверами. (А некоторые импортируемые драйверами символы не экспортирует никто вообще. Щас я примерно представляю, куда смотреть, чтобы понять как такое чудо возможно, но вернусь туда в лучшем случае через неделю.) Где-то 12% всех символов – такие вот «локальные», но в DYNSYM фигурирующие. И если включить их в поиск-резолвинг, то придётся в конфиг в дополнение к десятку директив addLibPath впилить сотню директив addLib, потратив массу времени, чтобы найти какие либы какие символы экспортируют. Так что, очевидно, я пойду по принципу «лучше хоть что-то чем ничего вообще» и локальные символы буду игнорить; даже для гентушника-задрота это перебор.

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

Ну, это уже на полноценный линкер тянет xD

Изо всех сил стараюсь избежать настолько глубокого изучения, но весь мой предыдущий жизненный опыт показывает, что тем всё и закончится. Никогда на костылях не получалось до финиша доезжать. Ну авось, всё ж когда-то происходит впервые.

Исходная версия dimgel, :

Насколько я знаю, ldd ищет зависимости рекурсивно

Да. А я собираю по файловой системе все динамические ELF и каждый анализирую независимо от остальных; и ошибка вылетит при анализе не приложения, а конкретно той либы, чья непосредственная зависимость отсутствует. Что есть гуд: не «какая-то либа у данной программы битая», а «такая-то конкретно либа из такого-то пакета битая» – и не важно, линкует ли её кто-то явно, грузит через dlopen() или не использует вообще.

А ещё бывают же либы, которые грузятся через dlopen, што с ними делать?

Это уже написал выше, и кстати это ерунда по сравнению с тем, что на системе огромное количество ELF-ов с локальными символами, которые на самом деле нифига не локальные, а импортируются либами, подгружаемыми через dlopen как плагины. Например, /usr/lib/Xorg (который вообще не либа, строго говоря; file его определяет как executable) экспортирует кучу символов которые импортируются x11-драйверами. (А некоторые импортируемые драйверами символы не экспортирует никто вообще. Щас я примерно представляю, куда смотреть, чтобы понять как такое чудо возможно, но вернусь туда в лучшем случае через неделю.) Где-то 12% всех символов – такие вот «локальные», но в DYNSYM фигурирующие. И если включить их в поиск-резолвинг, то придётся в конфиг в дополнение к десятку директив addLibPath впилить сотню директив addLib, потратив массу времени, чтобы найти какие либы какие символы экспортируют. Так что, очевидно, я пойду по принципу «лучше хоть что-то чем ничего вообще» и локальные символы буду игнорить; даже для гентушника-задрота это перебор.

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