有没有办法在objdump中获得完整的地址? 正在使用的命令是:objdump -d progname
Objdump没有显示完整的地址
的前导零不正确的。该地址应该如下:
最后三个在地址值是正确的;但是,我非常希望在objdump中显示完整的地址。
有没有办法在objdump中获得完整的地址? 正在使用的命令是:objdump -d progname
Objdump没有显示完整的地址
的前导零不正确的。该地址应该如下:
最后三个在地址值是正确的;但是,我非常希望在objdump中显示完整的地址。
在您的应用程序加载之前,您无法确定它将在内存中结束的位置。
试试下面的代码:
#include <stdio.h>
int main()
{
printf("%p\n", main);
}
与gcc test.c
编译并运行了好几次。
我的研究结果表明:
0x55f71f8936b0
0x5630ed7ff6b0
0x558a18eea6b0
...
所以你不能确切地知道它将会在内存结束。我认为情况并非总是如此,而这种行为的目的是作为安全“事情”。如果旧的内核/加载程序在每次运行时给出相同的地址,我不会感到惊讶。不过,我当然不知道。
当然objdump
会给你的相对地址:
00000000000006b0 <main>:
请记住,这个程序的输出不会给你的物理地址,它们仍然是虚拟的。
的要点是,通过objdump
倾倒地址是从每个执行的接头和实际的虚拟地址的责任是有,因为装载机的。
好的,这使得很多。我正在研究一个较老的内核,并且最近做了一个更新的内核。只是没有意识到有这个漂亮的安全功能。我蹲了一会儿,然后问道。猜猜我正在寻找错误的东西。无论如何,感谢您的信息。 –
请记住,无论您使用哪种加载程序,符号的最终地址都不会提供给objdump。使用较旧的加载器时,这个运行时地址在每次运行时可能都是相同的,但这是唯一的区别,我想。 –
这些地址是从*零*开始的吗? –
不,当我在edb中运行时,地址显示为第二个图像。 –
我想我的第一个问题是,你正在寻找一个物理或虚拟地址?其次,假设这是一个用户空间应用程序,我不认为'objdump'知道内核将在运行时放置应用程序的位置,甚至不太可能知道物理地址。 –