【问题标题】:GCC/ELF - from where comes my symbol?GCC/ELF - 我的符号从何而来?
【发布时间】:2010-09-24 19:15:46
【问题描述】:

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

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

【问题讨论】:

标签: linux gcc solaris elf ld


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案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

      【讨论】:

        【解决方案4】:
        $LD_DEBUG=bindings my_program
        

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

        【讨论】:

          猜你喜欢
          • 2012-09-22
          • 1970-01-01
          • 2012-06-09
          • 1970-01-01
          • 2019-06-08
          • 2015-07-07
          • 1970-01-01
          • 2019-10-28
          • 1970-01-01
          相关资源
          最近更新 更多