objdump和解析本地函数调用的链接?

时间:2012-01-24 19:35:34

标签: linux objdump

如果我在(linux amd64).o文件上运行objdump -d,函数调用将显示,而不会完成链接时间分辨率。例如:

  90:   66 89 44 24 1c          mov    %ax,0x1c(%rsp)
  95:   44 89 74 24 10          mov    %r14d,0x10(%rsp)
  9a:   e8 00 00 00 00          callq  9f <foo+0x9f>
  9f:   83 f8 ff                cmp    $0xffffffffffffffff,%eax
  a2:   74 5e                   je     102 <foo+0x102>

函数中的一个分支正确显示,但callq只是链接器的存根(有四个零字节可供链接器放入正确的地址)。

有没有办法在没有实际链接的情况下获得已解析函数名的汇编列表?我不关心最终将使用的地址,只关心函数的名称。该信息必须在.o文件中,因为链接器必须使用它来完成它的工作。

我问,因为有问题的代码进入的共享库大约是140Mb,并且需要 long 时间来运行objdump -d来获取带有所有函数调用的asm转储解决了他们的实际名字。

1 个答案:

答案 0 :(得分:13)

  

有没有办法在没有实际链接的情况下获得已解析函数名的汇编列表?

是:使用objdump -dr foo.o