GCC / ELF - 从哪里来我的符号?

时间:2008-12-01 17:51:34

标签: linux gcc solaris elf ld

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

如果有多种可能性,我可以将ld模仿并查看它的拍摄地点吗?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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

答案 2 :(得分: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

答案 3 :(得分:1)

$LD_DEBUG=bindings my_program

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