如何知道特定函数定义在哪个库中? [英] How to know which library a specific function is defined in?
本文介绍了如何知道特定函数定义在哪个库中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
[root@xxx memcached-1.4.5]# objdump -R memcached-debug |grep freeaddrinfo
0000000000629e10 R_X86_64_JUMP_SLOT freeaddrinfo
...
(gdb) disas freeaddrinfo
Dump of assembler code for function freeaddrinfo:
0x00000037aa4baf10 <freeaddrinfo+0>: push %rbp
0x00000037aa4baf11 <freeaddrinfo+1>: push %rbx
0x00000037aa4baf12 <freeaddrinfo+2>: mov %rdi,%rbx
所以我知道 freeaddrinfo
是一个动态链接的函数,但是如何知道它定义在哪个 .so
中呢?
So I know freeaddrinfo
is a dynamically linked function,but how to know which .so
it's defined in?
推荐答案
看这个 回答.info 符号 freeadrinfo
是一种查找方法.
See this answer. The info symbol freeadrinfo
is one way to find out.
在 Linux 和 Solaris 上,您还可以使用 ldd
和 LD_DEBUG=symbols
.例如,如果您想找出 /bin/date
中的 localtime
来自哪里:
On Linux and Solaris you can also use ldd
and LD_DEBUG=symbols
. For example, if you wanted to find out where localtime
in /bin/date
is coming from:
LD_DEBUG=bindings ldd -r /bin/date 2>&1 | grep localtime
26322: binding file /bin/date [0] to /lib/libc.so.6 [0]: normal symbol `localtime' [GLIBC_2.2.5]
这篇关于如何知道特定函数定义在哪个库中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文