[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