现在的位置: 首页 > 综合 > 正文

Linux下如何找到程序中是否有dlopen的库

2017年11月13日 ⁄ 综合 ⁄ 共 793字 ⁄ 字号 评论关闭

嵌入式系统开发下, 有时候要对库进行一些处理. 比如这个库没有被用到就可以被移除, 但是一般情况下没有去判断dlopen的库信息, 所以会造成误删除的情况.

这个bash脚本用来搜索指定目录或指定文件是否有使用dlopen的库及可执行文件.

注意: 该脚本因为是通过对二进制文件的分析实现所有有可能搜到实际上未使用dlopen的文件.

#!/bin/sh

ARGUMENT=""

check_dlopen()
{
    file $1 | grep "LSB executable\|LSB shared object" > /dev/null 2>&1
    if [ $? != 0 ] ; then
        return
    fi
    
    readelf -s $1 | grep "\<UND dlopen\>" > /dev/null 2>&1
    if [ $? != 0 ] ; then
        return
    fi
    
    echo "File $1 has dlopen function"
    echo "dlopen possiable file list:"
    strings -a $1 | grep "\.so" |sed -e 's/^/   /'
}

check_arg()
{
    if [ -f "$1" ] ; then
        check_dlopen $1
    elif [ -d "$1" ] ; then
        for i in $(find "$1" -type f); do
            check_dlopen $i
        done
    fi
}

usage()
{
   cat << END >&2
Usage: $progname [options] dir-name/file-name

Options:
    {-h|--help}
        print help.
END
}

while [ $# != 0 ]; do
    case $1 in
        -h  | --help) usage ; exit 1  ;;
        -*)           usage ; exit 1  ;;
         *)           ARGUMENT="$ARGUMENT $1";;
    esac
    shift
done

if [ -z "$ARGUMENT" ] ; then
   usage
   exit 1
fi

check_arg $ARGUMENT

抱歉!评论已关闭.