gpt4 book ai didi

embedded - 为基于 ARM 的嵌入式系统创建 coredump

转载 作者:行者123 更新时间:2023-12-04 18:06:03 24 4
gpt4 key购买 nike

我基本上是在跟进core dump note section .我没有发布那个问题,但我正在尝试做同样的事情:编写一个程序从头开始创建核心转储文件;除了我正在尝试为在嵌入式 ARM 处理器上运行的自定义单线程固件执行此操作。

我也指的是谷歌coredumper source 以了解通常如何创建核心文件。到目前为止,我已经成功创建了一个核心文件,其中包含一个 PT_NOTE 和一个 PT_LOAD 程序头,可由 GDB 读取。

请注意,我正在尝试为自定义固件创建此核心文件,这不是 Linux 环境。我的问题是关于 PT_LOAD 程序头。据我了解,我只需要创建与事件线程(需要为其创建核心)一样多的 PT_LOAD 程序 header , header 代表每个线程的内存映射。由于我的固件是单线程的,所以我只创建了一个 PT_LOAD 程序头,内存映射是堆栈上的地址值。

当我用这个新创建的核心文件加载固件的 ELF 镜像时,GDB 使用“info reg”准确地打印寄存器。 GDB 还识别 PC(程序计数器)值并准确显示符号。但是,它无法显示堆栈中剩余的帧(“bt”不起作用)。它提示它“无法访问地址 (SP+4) 处的内存”。

我已经在核心文件中提供了固件的堆栈映射,GDB 应该能够读取地址 (SP+4)。请注意,我可以使用“x 0x(SP+4)”检查 (SP+4) 处的值。

谁能告诉我我在这里错过了什么?

谢谢

最佳答案

我想通了。显然,PT_LOAD 程序头的内容——堆栈映射——并不完整。问题是它需要正在运行的一个线程的完整映射。在我包含整个 CPU SRAM 的内容后,GDB“bt”和所有其他命令都可以正常工作。

此外,据我所知,可执行文件具有所有变量的地址,核心文件具有这些变量的运行时值。因此,如果任何符号驻留在内存 (RAM) 中,则应添加带有 RAM 映射的单独 PT_LOAD 程序头。之后 GDB 应该能够准确地打印这些变量的运行时值。如果没有映射,变量的值将为 0(如 GDB 所示)。

关于embedded - 为基于 ARM 的嵌入式系统创建 coredump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com