4

有一个可执行文件动态链接到共享对象的数量。我如何确定某个符号(导入可执行文件)属于其中的哪一个?

如果有不止一种可能性,我可以模拟 ld 并查看它是从哪里拍摄的吗?

4

4 回答 4

5

看看nm(1)objdump(1)elfdump(1)

于 2008-12-01T17:59:14.680 回答
5

除了查理提到的那些,“ ldd ”可能会做一些你正在寻找的事情。

于 2008-12-01T18:03:38.273 回答
3

如果您可以重新链接可执行文件,找出引用和定义来自何处的最简单方法是使用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针对您感兴趣的符号运行。

于 2008-12-04T07:38:19.423 回答
1
$LD_DEBUG=bindings my_program

这将在控制台上打印所有符号绑定。

于 2009-02-17T06:13:56.547 回答