Linux 下 ldd 检查依赖 | strings用法 | locate
【摘要】
Linux 下 使用 locate 命令 定位文件位置
locate libc.a
/usr/lib/x86_64-linux-gnu/libc.a
/usr/share/doc/libkl...
Linux 下 使用 locate 命令 定位文件位置
locate libc.a
/usr/lib/x86_64-linux-gnu/libc.a
/usr/share/doc/libklibc/README.klibc.arch
- 1
- 2
- 3
- 4
- 5
Linux下的库操作工具-nm、ar、ldd、ldconfig、ld.so
ldd 检查依赖
ldd是用来分析程序运行时需要依赖的动态库的工具;
nm是用来查看指定程序中的符号表相关内容的工具
ldd --version
ldd (Ubuntu GLIBC 2.27-3ubuntu1.2) 2.27
which ldd
/usr/bin/ldd
- 1
- 2
- 3
- 4
- 5
- 6
- 示例 ldd 检查依赖
ldd libkrrface.so
linux-vdso.so.1 (0x0000007f82c5b000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000007f7d75a000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000007f7d5b5000)
libm.so.6 => /lib64/libm.so.6 (0x0000007f7d4f4000)
libgomp.so.1 => /lib64/libgomp.so.1 (0x0000007f7d4b3000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000007f7d482000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000007f7d44d000)
libc.so.6 => /lib64/libc.so.6 (0x0000007f7d2d7000)
/lib/ld-linux-aarch64.so.1 (0x0000007f82c2d000)
/*
# 第一列:程序需要依赖什么库
# 第二列: 系统提供的与程序需要的库所对应库位置
# 第三列:库加载的开始地址
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 示例 nm 查看指定程序中的符号表相关内容
/*
直接 检查所有 , 可能会输出一些不是很能看懂的东西
*/
nm -D libkrrface.so
00000000051a3b08 V _ZTVN3MNN12SizeComputerE
00000000051a3b38 V _ZTVN3MNN13WrapExecutionE
00000000051a4a88 V _ZTVN3MNN7Express9Optimizer10ParametersE
U _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE
U _ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE
U _ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE
U _ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE
U _ZTVSi
U _ZTVSt13basic_filebufIcSt11char_traitsIcEE
U _ZTVSt14basic_ifstreamIcSt11char_traitsIcEE
U _ZTVSt14basic_ofstreamIcSt11char_traitsIcEE
U _ZTVSt15basic_streambufIcSt11char_traitsIcEE
/*
在nm的时候,加上-C选项,就可以把这些难以识别的符号,转换成便于我们阅读的符号TestHello()
这个主要是c++中的mangle机制所导致的,加上-C就是指定列出的符号是demangle了的
*/
nm -D libkrrface.so -C
00000000051a3b08 V vtable for MNN::SizeComputer
00000000051a3b38 V vtable for MNN::WrapExecution
00000000051a4a88 V vtable for MNN::Express::Optimizer::Parameters
U vtable for std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >
U vtable for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >
U vtable for std::__cxx11::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >
U vtable for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >
U vtable for std::istream
U vtable for std::basic_filebuf<char, std::char_traits<char> >
U vtable for std::basic_ifstream<char, std::char_traits<char> >
U vtable for std::basic_ofstream<char, std::char_traits<char> >
U vtable for std::basic_streambuf<char, std::char_traits<char> >
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 通常会 使用 grep 来 判断指定程序中有没有定义 指定的符号 或者 方法
nm -D libkrrface.so | grep WF_
000000000008f000 T WF_HeadLite_HeadAlign
000000000008f510 T WF_HeadLite_HeadDetect
000000000008f180 T WF_HeadLite_HeadFeatureExtract
000000000008f350 T WF_HeadLite_HeadFeatureVerify
000000000008f178 T WF_HeadLite_GetHeadAlignSize
000000000008ec70 T WF_HeadLite_InitializeInstance
000000000008edf0 T WF_HeadLite_ReleaseInstance
/*
第一列:当前符号的地址
第二列:当前符号的类型
第三列:当前符号的名称
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
/*
strings 基本用法是 打印 程序
*/
strings test.py
/*
进阶用法 ,当然是 单个文件 或者 多个文件 进行 关键词 搜索
*/
strings -f * | grep "my dear"
strings /lib64/libc.so.6 | grep GLIBC
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
ldd 和 readelf -d 用法示例
文章来源: positive.blog.csdn.net,作者:墨理学AI,版权归原作者所有,如需转载,请联系作者。
原文链接:positive.blog.csdn.net/article/details/115200579
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)