查找共享库里面的函数 用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:仅显示外部符号。
此命令可以用于查找文件或设计
nm -o /lib/*.so|grep sin 功能:找sin这个函数所在的库。
阅读(3537) | 评论(0) | 转发(0) |