如何知道在哪个库中定义了特定的函数? [英] How to know which library a specific function is defined in?

查看:208
本文介绍了如何知道在哪个库中定义了特定的函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

[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 =符号。例如,如果你想知道 / 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆