如何知道哪个库定义了特定的功能?

com*_*ler 10 gdb objdump

[root@xxx memcached-1.4.5]# objdump -R memcached-debug |grep freeaddrinfo
0000000000629e10 R_X86_64_JUMP_SLOT  freeaddrinfo
Run Code Online (Sandbox Code Playgroud)

...

(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
Run Code Online (Sandbox Code Playgroud)

所以我知道freeaddrinfo是一个动态链接的函数,但是如何知道.so它的定义?

Emp*_*ian 8

看到这个答案.这info symbol freeadrinfo是一种了解的方法.

在Linux和Solaris上,您也可以使用lddLD_DEBUG=symbols.例如,如果你想找出localtime/bin/date来自哪里:

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]
Run Code Online (Sandbox Code Playgroud)