这是一个内存地址吗?

时间:2011-06-27 22:25:57

标签: memory gdb

我正在学习gdb,我得到了第一个错误。这是错误:

0x00007fff83074096 in __kill ()

地址是:

0x00007fff83074096

...十六进制格式的内存地址?我把它转换为十进制,出于兴趣,数字很大。我不相信存在这么多内存地址。

4 个答案:

答案 0 :(得分:5)

如果您在64位平台上运行,那么是,存在大的地址。 (另见:http://en.wikipedia.org/wiki/Virtual_address。)

当然,你可能只是在某个地方有一个缓冲区溢出,它已经损坏你的堆栈,并用废话覆盖了地址。

答案 1 :(得分:5)

烨。它是。

它是64位进程的虚拟内存空间中的地址。

并非所有地址都在使用中(这就是地址:它只是一个标签)。

您可以通过

查看有关该地址的更多信息
:break 0x00007fff83074096
:list 0x00007fff83074096
:disassemble 0x00007fff83074096

查看整个堆栈bactkrace

 :bt full

在所有线程中

 :thread apply all bt full

答案 2 :(得分:3)

是的,它是一个内存地址。由于paging,可用的内存地址远远大于返回虚拟地址空间的实际内存。

您可能会发现运行pmap -x 1pmap -x $$具有指导性,同时查看不同进程的/proc/pid/maps内容。 (cat /proc/self/maps很容易运行。)

答案 3 :(得分:2)

16个十六进制数字x 4(由一个十六进制数字表示的位)= 64位。您使用的是64位平台,为什么感到惊讶?