[devel] verify_elfsym
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Сен 21 15:17:27 MSD 2005
Вот упрощенная реализация проверки ELF'ов, как я её себе представляю.
----------- следующая часть -----------
#!/bin/sh -ef
elf1_undefined_symbols()
{
local elf="$1" err=
err="$(ldd -r "$elf" 2>&1 1>/dev/null)" || return
[ -n "$err" ] || return 0
echo "$err" |awk '/^undefined symbol:/ {
gsub("^[(]|[)]$", "", $NF)
print $3 "\t" $NF
}'
}
elf1_verify_strict()
{
local elf="$1" err=
err=$(elf1_undefined_symbols "$elf") || return 2
[ -n "$err" ] || return 0
echo "Error: $elf: undefined symbols" >&2
echo "$err" >&2
return 1
}
elf1_verify_relaxed()
{
local elf="$1" symtab="$2" err=
err=$(elf1_undefined_symbols "$elf") || return 2
[ -n "$err" ] || return 0
local rc=0 sym= obj=
while IFS=$'\t' read -r sym obj; do
if [ "$obj" != "$elf" ]; then
echo "Error: $elf: undefined symbol: $sym ($obj)" >&2
rc=1
elif ! bloom -e "$sym" "$symtab"; then
echo "Error: $elf: undefined symbol: $sym" >&2
rc=1
fi
done <<<"$err"
return $rc
}
rc=0 symtab="$1"; shift
for elf; do
type="$(file -b "$elf")"
if [ -z "${type##*ELF*executable*dynamic*}" ]; then
elf1_verify_strict "$elf" || rc=1
elif [ -z "${type##*ELF*shared*}" -a -z "${elf##*/lib/lib*.so*}" ]; then
elf1_verify_strict "$elf" || rc=1
elif [ -z "${type##*ELF*dynamic*}" -o -z "${type##*ELF*shared*}" ]; then
elf1_verify_relaxed "$elf" "$symtab" || rc=1
fi
done
exit $rc
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?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/20050921/08ac0ade/attachment-0001.bin>
Подробная информация о списке рассылки Devel