1

我有一个核心转储,显示线程在执行时因 SIGBUS 信号而死机mov %r15d,0xa0(%rsp)。这似乎告诉我它死了,因为它用完了线程堆栈。

但是我怎么证明呢?除了线程回溯之外,我似乎找不到显示线程信息的 GDB 命令。在这种情况下,没有回溯。它显示当前函数,然后显示 0x0000000000000000。我认为,堆栈损坏的另一个迹象。

我没有 /proc/[pid]/maps 程序死亡时的副本。我可以查看 GDB 或核心文件中的任何内容以查找每个线程堆栈的基础吗?

4

1 回答 1

1

这似乎告诉我它死了,因为它用完了线程堆栈。

很可能

但是我怎么证明呢?

(gdb) p/x $rsp
$1 = 0x7fffc5791000

(gdb) info target
Symbols from "a.out".
Local core dump file:
    `core', file type elf64-x86-64.
    0x0000000000400000 - 0x0000000000401000 is load1
    ...
    0x00007faaf2240000 - 0x00007faaf2241000 is load14
    0x00007fffc5791000 - 0x00007fffc5f91000 is load15
    0x00007fffc5faf000 - 0x00007fffc5fb0000 is load16
    0xffffffffff600000 - 0xffffffffff600000 is load17
 Local exec file:
  ...

注意段$rsp的(低)端如何load15,并且没有“覆盖”的映射$rsp-8

于 2012-09-28T22:40:07.233 回答