On Sun, Sep 18, 2005 at 03:00:44AM +0400, Alexey Tourbin wrote: > On Sun, Sep 18, 2005 at 02:32:43AM +0400, Dmitry V. Levin wrote: > > Просто, как всегда, хочется сделать сразу так, чтобы потом не > > переделывать (не должно быть ложных срабатываний). > > А на это, как всегда, не хватает времени. > > А нужны более тонкие проверки, с reverse lookup'ом. Надо попробовать > нарисовать все эти ER-диаграммы. Но для этого нужно поставить пиратскую > винду, водрузить на неё пиратскую Rational Rose и т.п. Зачем? Если в сборочной среде правильно запущенный "ldd -r" выявляет undefined references, то этого зачастую достаточно. > То есть что является уникальным ключом в этой модели? Символ? Нет. > Комбинация soname+символ. И join в этом модели (т.е. отношение "один к > одному") должно строиться как раз на основе этого ключа: soname+символ. Тот факт, что какой-то ELF содержит символ, похожий на тот, который показывает "ldd -r" как undefined reference, ещё мало что даёт. > > Да и с ELF'ами, в которых эти undefined references зашиты by design, тоже > > надо что-то делать (вспомни, например, libthread_db.so.1). > > А я не помню, что там... А там как раз такой дизайн: $ ldd -r /lib/libthread_db.so.1 >/dev/null undefined symbol: ps_pglobal_lookup (/lib/libthread_db.so.1) undefined symbol: ps_pdwrite (/lib/libthread_db.so.1) undefined symbol: ps_lsetfpregs (/lib/libthread_db.so.1) undefined symbol: ps_getpid (/lib/libthread_db.so.1) undefined symbol: ps_lsetregs (/lib/libthread_db.so.1) undefined symbol: ps_pdread (/lib/libthread_db.so.1) undefined symbol: ps_lgetfpregs (/lib/libthread_db.so.1) undefined symbol: ps_lgetregs (/lib/libthread_db.so.1) $ readelf -Ws /usr/bin/gdb |grep -w ps_pglobal_lookup 129: 080934b0 52 FUNC GLOBAL DEFAULT 12 ps_pglobal_lookup $ ldd -r /usr/bin/gdb |fgrep -c libthread_db 0 > Да нет, я просто пока понял, что если символов вообще нигде нет, то их > точно вообще нигде нет. :) Я написал, что это слабая проверка, она > ничего не гарантирует, только обнаруживает вопиющие случаи... Скорее клинические. :) -- ldv