如果我在 (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,并且需要很长时间运行 objdump -d 才能获得所有函数调用解析为实际名称的 asm 转储。