有没有办法在objdump中获取完整地址?
正在使用的命令是:objdump -d progname
前导零是不正确的。地址应如下:
地址中的最后三个值是正确的;但是,我非常喜欢在objdump中显示的完整地址。
答案 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”,它现在显示正确的地址。