[devel] rpmelfsym
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Сен 13 15:31:58 MSD 2005
Хочется сделать полный дамп символов всех ELF'ов в сизифе.
ELF'ы отсеиваются так:
rpmfile "$rpm" >files
awk -F'\t' '$3~/ELF.*(dynamic|shared)/{print$1}' files >elfs
Не ясно, какой формат для дампа символов выбрать.
Сделал на основе nm -D:
while read elf; do
nm -D d/"$elf" >d/.nm
awk -v f="$elf" '{OFS="\t"}NF==2{print f,0,$1,$2}NF==3{print f,1,$2,$3}' d/.nm
done <elfs
Получается вот что:
$ rpmelfsym ~/RPM/RPMS/perl-base-5.8.7-alt1.i686.rpm |head
/usr/bin/perl5.8.7 0 U PL_do_undump
/usr/bin/perl5.8.7 0 U PL_op_mutex
/usr/bin/perl5.8.7 0 U PL_sigfpe_saved
/usr/bin/perl5.8.7 0 U PL_use_safe_putenv
/usr/bin/perl5.8.7 0 U Perl_atfork_lock
/usr/bin/perl5.8.7 0 U Perl_atfork_unlock
/usr/bin/perl5.8.7 0 U Perl_croak_nocontext
/usr/bin/perl5.8.7 0 U Perl_newXS
/usr/bin/perl5.8.7 1 A _DYNAMIC
/usr/bin/perl5.8.7 1 R _IO_stdin_used
$ rpmelfsym ~/RPM/RPMS/perl-base-5.8.7-alt1.i686.rpm |sort -u -k1,1
/usr/bin/perl5.8.7 0 U PL_do_undump
/usr/lib/libperl.so.5.8.7 1 A DynaLoader
/usr/lib/perl5/i386-linux/auto/B/B.so 0 U PL_op_desc
/usr/lib/perl5/i386-linux/auto/Cwd/Cwd.so 0 U Perl_Gthr_key_ptr
/usr/lib/perl5/i386-linux/auto/Data/Dumper/Dumper.so 0 U PL_utf8skip
/usr/lib/perl5/i386-linux/auto/Digest/MD5/MD5.so 0 U Perl_Idowarn_ptr
/usr/lib/perl5/i386-linux/auto/Fcntl/Fcntl.so 0 U Perl_Isv_undef_ptr
/usr/lib/perl5/i386-linux/auto/File/Glob/Glob.so 0 U PL_memory_wrap
/usr/lib/perl5/i386-linux/auto/I18N/Langinfo/Langinfo.so 0 U Perl_Gthr_key_ptr
/usr/lib/perl5/i386-linux/auto/IO/IO.so 0 U PerlIO_getpos
/usr/lib/perl5/i386-linux/auto/IPC/SysV/SysV.so 0 U Perl_Gthr_key_ptr
/usr/lib/perl5/i386-linux/auto/List/Util/Util.so 0 U PL_ppaddr
/usr/lib/perl5/i386-linux/auto/MIME/Base64/Base64.so 0 U Perl_Idowarn_ptr
/usr/lib/perl5/i386-linux/auto/Opcode/Opcode.so 0 U Perl_Idefgv_ptr
/usr/lib/perl5/i386-linux/auto/POSIX/POSIX.so 0 U PL_sig_name
/usr/lib/perl5/i386-linux/auto/Socket/Socket.so 0 U Perl_Ireentrant_buffer_ptr
/usr/lib/perl5/i386-linux/auto/Sys/Hostname/Hostname.so 0 U Perl_Gthr_key_ptr
/usr/lib/perl5/i386-linux/auto/Sys/Syslog/Syslog.so 0 U Perl_Gthr_key_ptr
/usr/lib/perl5/i386-linux/auto/Time/HiRes/HiRes.so 0 U Perl_Imodglobal_ptr
/usr/lib/perl5/i386-linux/auto/attrs/attrs.so 0 U Perl_Icompcv_ptr
$ rpmelfsym ~/RPM/RPMS/perl-base-5.8.7-alt1.i686.rpm |wc -lc
3639 195178
$
Нутром чую проблему: дамп получится большой. С гигабайт. Может быть,
некоторые символы не нужны? Интересуют только символы, связанные с
разделяемыми библиотеками. То есть либо бинарь требует символ в
разделяемой библиотеке (это вроде U), либо библиотека предоставляет это
символ -- это будет T для функции и B/D для глобальной переменной.
...
Есть какие-нибудь идеи?
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20050913/69e4fb37/attachment-0001.bin>
Подробная информация о списке рассылки Devel