如何解决如何查找在Linux中执行期间实际使用的所有共享库?
我有一个可执行文件,我想找出在特定运行期间实际使用了哪些共享库。我知道ldd会列出该可执行文件的所有共享库依赖关系,但我想找出在特定运行*中实际使用的那些子集。这可能吗?
*我的意思是在特定运行中使用某些输入参数运行可执行文件,这只会导致一小部分代码得以运行。
解决方法
您可以使用strace
和grep来打开.so文件。
strace $MYPROG | grep -E '^open*\.so
lsof
也应该对开放库进行grep处理。
lsof -p $PID | awk '{print $9}' | grep '\.so'
这假定共享库的扩展名为.so
,您可以为此使用ltrace(1)
$ PROG='ls -l'
# Collect call info
$ ltrace -o calls.txt -l '*' $PROG &> /dev/null
# Analyze collected data
$ cat calls.txt | sed -ne '/->/{ s/^\(.*\)->.*/\1/; p }' | sort -u
libacl.so.1
libcap.so.2
libc.so.6
libselinux.so.1
ls
# Compare with ldd
$ ldd /bin/ls | wc -l
10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。