Objdump没有显示完整的地址

时间:2017-08-03 20:13:39

标签: linux objdump

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

enter image description here

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

enter image description here

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

2 个答案:

答案 0 :(得分:2)

在你的应用程序加载之前,你无法分辨它将在内存中的结束位置。

请尝试以下代码:

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

gcc test.c编译并运行几次。

我的结果显示:

0x55f71f8936b0
0x5630ed7ff6b0
0x558a18eea6b0
...

所以你无法确定它将在内存中结束的位置。我相信情况并非总是如此,而且这种行为旨在作为安全“东西”。如果旧的内核/加载器在每次运行时给出相同的地址,我不会感到惊讶。但我肯定不知道。

当然objdump会给你相对地址:

00000000000006b0 <main>:

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

关键是由objdump转储的地址是链接器的责任,并且由于加载程序,每次执行的实际虚拟地址都存在。< / p>

答案 1 :(得分:0)

除了可接受的答案:

要获取正确的地址,请在gdb中运行该程序,然后键入start,然后执行“ disas functionname”,它现在显示正确的地址。