【发布时间】:2010-09-24 19:15:46
【问题描述】:
有一个可执行文件动态链接到共享对象的数量。我如何确定某个符号(导入可执行文件)属于哪个?
如果有不止一种可能性,我可以模拟 ld 并查看它是从哪里拍摄的吗?
【问题讨论】:
有一个可执行文件动态链接到共享对象的数量。我如何确定某个符号(导入可执行文件)属于哪个?
如果有不止一种可能性,我可以模拟 ld 并查看它是从哪里拍摄的吗?
【问题讨论】:
【讨论】:
除了查理提到的那些,“ldd”可能会做一些你正在寻找的事情。
【讨论】:
如果您可以重新链接可执行文件,找出引用和定义来自何处的最简单方法是使用ld-y 标志。例如:
$ cat t.c
int main() { printf("Hello\n"); return 0; }
$ gcc t.c -Wl,-yprintf
/lib/libc.so.6: definition of printf
如果您无法重新链接可执行文件,则对其运行ldd,然后在按顺序列出的所有库上运行'nm -D',并为您感兴趣的符号运行grep。
【讨论】:
$LD_DEBUG=bindings my_program
这将在控制台上打印所有符号绑定。
【讨论】: