Objdump 不显示完整地址

Objdump not showing complete address

有没有办法在objdump中获取完整地址? 使用的命令是:objdump -d progname

前导零不正确。地址应如下:

地址中的最后三个值是正确的;但是,我非常希望在 objdump 中显示完整地址。

在您的应用程序加载之前,您无法判断它将在内存中的何处结束。

试试下面的代码:

#include <stdio.h>
int main()
{
    printf("%p\n", main);
}

gcc test.c和运行多次编译。

我的结果显示:

0x55f71f8936b0
0x5630ed7ff6b0
0x558a18eea6b0
...

所以你不能确定它会在内存中的什么地方结束。我相信情况并非总是如此,这种行为旨在作为一种安全措施 "thingy"。如果老 kernel/loaders 在每个 运行 上给出相同的地址,我不会感到惊讶。不过我不确定。

当然objdump会给你相对地址:

00000000000006b0 <main>:

请记住,此程序的输出不会为您提供物理地址,它们仍然是虚拟地址。

重点是 objdump 转储的地址是 链接器 的责任,并且由于 而存在每次执行的实际虚拟地址装载机.

除了已接受的答案:

要获得正确的地址,您 运行 gdb 中的程序,然后键入开始,然后执行 "disas functionname" 现在它会显示正确的地址。