有办法在objdump得到完整的地址吗?正在使用的命令是:objdump -d progname

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

地址中的最后三个值是正确的;但是,我非常希望在objdump中显示完整的地址。
发布于 2017-08-04 09:18:09
在加载应用程序之前,您无法知道它在内存中的位置。
尝试以下代码:
#include <stdio.h>
int main()
{
printf("%p\n", main);
}用gcc test.c编译它并运行几次。
我的结果显示:
0x55f71f8936b0
0x5630ed7ff6b0
0x558a18eea6b0
...所以你不能确定它会在记忆中的什么位置结束。我相信情况并不总是如此,这种行为是为了安全“东西”。如果老内核/加载程序在每次运行时给出相同的地址,我也不会感到惊讶。不过,我不太确定。
当然,objdump会给出相对地址:
00000000000006b0 <main>:请记住,此程序的输出不给您物理地址,它们仍然是虚拟的。
关键是,objdump转储的地址是链接器的责任,每个执行过程中的实际虚拟地址都在那里,因为加载器。
发布于 2018-11-01 22:59:48
除已接受的答案外:
要获得正确的地址,您可以在gdb中运行程序,然后输入start,然后执行"disas functionname“,它将显示正确的地址。
https://stackoverflow.com/questions/45493756
复制相似问题