[devel] rpmelfsymv

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Авг 21 19:19:46 MSD 2006


On Sun, Aug 13, 2006 at 08:59:15PM +0400, Alexey Tourbin wrote:
> > Таким образом, нужно использовать objdump -wT вместо nm -D.
> 
> Вот так вроде работает.
> 
> --- /home/at/cvs/qa/qa-robot/rpmelfsym	2006-05-27 11:15:29 +0000
> +++ /home/at/cvs/qa/qa-robot/rpmelfsymv	2006-08-13 16:57:32 +0000
> @@ -1,17 +1,39 @@
>  #!/bin/sh -ef
>  export LC_ALL=C
>  
> -rpmelfsym()
> +rpmelfsymv()
>  {
>  	rpmfile "$1" >files
>  	awk -F'\t' '$NF~/ELF.*(dynamic|shared)/{printf"./%s\0",$1}' files >elfs0
>  	[ -s elfs0 ] || return 0
> -	rpmpeek "$1" xargs -r0 nm -Do <elfs0 >nm.out
> -	awk '{OFS="\t";sub("^./","",$1);sub(":[0-9a-fA-F]*$","",$1);print}' nm.out
> +	rpmpeek "$1" xargs -r0 objdump -Tw  <elfs0 >objdump.out
> +	perl -ln - objdump.out <<'__EOF__'
> +#!/usr/bin/perl	
> +	if (/^$/ or /^DYNAMIC SYMBOL TABLE:$/) { next; }
> +	if (s/:\s+file format.+//) { s[^./][]; $f = $_; next; }
> +BEGIN { $x = qr/([a-f0-9]+)/; $w = qr/(\w+)/; $S = qr/(\S+?)/; $s = qr/[ ]+/; }
> +BEGIN { %T = qw(.text T .data D .bss B .rodata R .data.rel.ro D *ABS* A *UND* U
> +		.init T .fini T __libc_freeres_fn T __libc_thread_freeres_fn T
> +		.interp R text.hot T text.unlikely T); }
> +	if (/^$x$s(?:$w$s)?$w$s$S\t$x$s(?:[(]?$S[)]?$s)?(?:[.0]$w$s)?$S$/) {
> +		$vis = $2; $typ = $4; $abi = $6; $sym = $8;
> +		next if $vis eq "l";
> +		$t = $T{$typ} or die "$f: $sym: unknown type $typ\n";
> +		$vis eq "w" and $t eq "U" and $t = "w" or
> +		$vis eq "w" and $t .= "W";
> +		$abi = "-" if $abi eq "" or $abi eq "Base";
> +		print "$f\t$t\t$sym\t$abi";
> +		next;
> +	}
> +	if (/^$x$s(?:$w$s)?$w$s$S\t$x$s$/) {
> +		next;
> +	}
> +	die "bad objdump output:\n$_";
> +__EOF__
>  }

Однако

$ rpmpeek libxfce4util-4.2.3.2-alt1.1.i586.rpm objdump -Tw ./usr/lib/libxfce4util.so.1.0.9 |fgrep -m1 -C1 .xfce.LICENSES
00009380 l    d  .rodata        00000000              .rodata
0000a220 l    d  .xfce.LICENSES 00000000              .xfce.LICENSES
0001501c l    d  .eh_frame      00000000              .eh_frame
$

Тип символа -- .xfce.LICENSES!  Что это за самодеятельность?
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20060821/5febffbe/attachment-0001.bin>


Подробная информация о списке рассылки Devel