【发布时间】:2014-10-29 22:00:57
【问题描述】:
我基本上是在跟进core dump note section。我没有发布那个问题,但我正在尝试做同样的事情:编写一个程序来从头开始创建核心转储文件;除了我正在尝试为在嵌入式 ARM 处理器上运行的自定义单线程固件执行此操作。
我还参考了 Google coredumper 来源以了解通常如何创建核心文件。到目前为止,我已经成功创建了一个带有 PT_NOTE 和 PT_LOAD 程序头的核心文件,GDB 可以读取它。
请注意,我正在尝试为自定义固件创建此核心文件,这不是 Linux 环境。我的问题是关于 PT_LOAD 程序头的。据我了解,我只需要创建与活动线程(需要为其创建核心)一样多的 PT_LOAD 程序标头,其中标头代表每个线程的内存映射。由于我的固件是单线程的,我只创建了一个 PT_LOAD 程序头,其中内存映射是堆栈上的地址值。
当我使用这个新创建的核心文件加载固件的 ELF 映像时,GDB 会使用“info reg”准确地打印寄存器。 GDB 还可以识别 PC(程序计数器)值并准确显示符号。但是,它无法显示堆栈中的剩余帧(“bt”不起作用)。它抱怨它“无法访问地址 (SP+4) 处的内存”。
我已经在核心文件中提供了固件的堆栈映射,GDB 应该能够在地址 (SP+4) 处读取。请注意,我可以使用“x 0x(SP+4)”检查 (SP+4) 处的值。
谁能告诉我这里缺少什么?
谢谢
【问题讨论】: