我正在学习gdb,我得到了第一个错误。这是错误:
0x00007fff83074096 in __kill ()
地址是:
0x00007fff83074096
...十六进制格式的内存地址?我把它转换为十进制,出于兴趣,数字很大。我不相信存在这么多内存地址。
答案 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 1
或pmap -x $$
具有指导性,同时查看不同进程的/proc/pid/maps
内容。 (cat /proc/self/maps
很容易运行。)
答案 3 :(得分:2)
16个十六进制数字x 4(由一个十六进制数字表示的位)= 64位。您使用的是64位平台,为什么感到惊讶?