linux命令 nm

查找共享库里面的函数 用nm命令

nm命令用来列出一个目标文件中的符号。
符号的类型如下:
R ----Read only symbol 。比如在代码中有一个const MAXDATA = 110; 则MAXDATA就是一个Read only symbol;
N ----一个调试符号;
D ----一个已经初始化的变量的符号。比如代码中int  i = 1和char *str = "Hello"则i和str都是这种类型的符号 ;
T ----Text段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号; 
U ----未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数就是这种类型;
S ----未初始化的符号。比如全局变量int s ; 则s就是这种类型的符号。

nm命令的用法:如 nm -a xx.o
以下几个关键字比较常用:
1、"-A"、-o或--print-file-name,在找到的各个符号的名字前加上文件名。
2、"-a"或--debug-syms:列出所有符号,这将会把调试符号也列出来。默认状态下调试符号不会被列出。
3、"-l"--line-numbers,使用调试信息来试图找到文件名和行号。对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符
号重定位入口的行号。如果可以找到行号信息,显示在符号信息之后。
4、"-n",根据符号的地址来排序
默认是按符号名称的字母顺序排序的
5、"-u",--undefined-only:仅显示没有定义的符号(那些外部符号)。
 而"--defined-only"将只列出已定义符号
6. "-D" 或--dynamic:显示动态符号。该任选项仅对于动态目标(例如特定类型的共享库)有意义。
7. "-g"或--extern-only:仅显示外部符号。

此命令可以用于查找文件或设计


linux strip 可以去除链接信息 让nm看不到 但是readelf 用-s参数 仍然可以看到
例如readelf -s libACE-5.7.1.so
使用readelf查看动态库的真实名字
readelf -d 动态库文件
查看共享库的依赖库(NEEDED)和搜索名(SONAME)。
readelf -d <file_name>
例如:
#readelf -d libuClibc-0.9.30rc2.so
Dynamic section at offset 0x90f50 contains 18 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [ld-uClibc.so.0]
0x0000000e (SONAME) Library soname: [libc.so.0]
Library soname显示的就是实际的动态链接库名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值