如果我在(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>
Run Code Online (Sandbox Code Playgroud)
函数中的一个分支正确显示,但callq只是为链接器输入的存根(有四个字节的零可供链接器放入正确的地址).
有没有一种方法,没有实际链接,以获得已解决函数名称的汇编列表?我不关心最终将使用的地址,只关心函数的名称.该信息必须位于.o文件中,因为链接器必须使用它来完成其工作.
我问,因为有问题的代码进入的共享库大约是140Mb,并且需要很长时间才能运行objdump -d来获取asm转储,并将所有函数调用解析为实际名称.
Emp*_*ian 14
有没有一种方法,没有实际链接,以获得已解决函数名称的汇编列表?
是的:使用 objdump -dr foo.o