Linux 核心转储文件格式

Linux 核心转储文件格式,linux,gdb,kernel,Linux,Gdb,Kernel,我已经为一个项目编写了一个自定义核心转储处理应用程序。我已更改“/proc/sys/kernel/core_pattern”以调用我的转储处理程序并成功调用它 现在的问题是将核心转储保存到gdb可以识别的文件中。当前,我的转储处理程序从STDIN读取转储并将其保存到文件“core.dump”中。当我尝试将此核心转储加载到gdb时,它会给我错误: (gdb)。。。不是核心转储:无法识别文件格式 当我在标准堆芯转储上运行“file”命令时,它会给出以下信息: core:ELF 64位LSB核心文件x

我已经为一个项目编写了一个自定义核心转储处理应用程序。我已更改“/proc/sys/kernel/core_pattern”以调用我的转储处理程序并成功调用它

现在的问题是将核心转储保存到gdb可以识别的文件中。当前,我的转储处理程序从STDIN读取转储并将其保存到文件“core.dump”中。当我尝试将此核心转储加载到gdb时,它会给我错误:

(gdb)。。。不是核心转储:无法识别文件格式

当我在标准堆芯转储上运行“file”命令时,它会给出以下信息:

core:ELF 64位LSB核心文件x86-64,版本1(SYSV),SVR4样式,来自“/dump\u gen”

对于自定义生成的转储,“文件”提供以下信息:

core.dump:数据

请任何人都可以帮助我如何写核心转储正确,以便它可以在gdb中使用


PS:我不想使用标准的核心转储文件。

首先要检查的是Elf头标志,它指示文件的类型。它有四个值-共享对象、未链接对象、可执行文件和核心转储。这很可能是导致gdb错误的原因

另外,尝试用objdump检查它——它可以将整个ELF文件分离出来,以便分析其中哪些部分显然不好


您可以在

中找到ELF规范,我认为您没有将所有数据写入核心文件

创建一个简单的脚本,使其可执行,并将核心模式设置为脚本

#!/bin/sh
cat > /tmp/core.$$
现在生成一个核心文件(例如运行
sleep 1243
并按
ctrl+\
),它应该可以工作


我刚刚在我的系统上自己测试了它,它可以正常工作。

感谢您的快速响应。我检查了你的方法,它成功了,所以我查看了我的c代码,发现了将数据复制到缓冲区的错误。我也面临同样的问题,但我只是想知道上面的步骤能做什么?它是否会生成一个新的核心转储,可以作为参数传递给gdb?谢谢