核心转储文件格式

6
我为一个项目编写了一个自定义核心转储处理应用程序。我已经更改了'/proc/sys/kernel/core_pattern'以调用我的转储处理程序,并且成功地调用了它。
现在的问题是将核心转储保存到可以被gdb识别的文件中。当前,我的转储处理程序从STDIN读取转储并将其保存到文件“core.dump”中。当我尝试将此核心转储加载到gdb中时,它会给出错误:
(gdb) ...不是核心转储:无法识别文件格式
当我在标准核心转储上运行'file'命令时,它会给我以下内容:
core: ELF 64-bit LSB core file x86-64,version 1 (SYSV),SVR4-style,from './dump_gen'
对于自动生成的自定义转储,'file'给出以下内容:
core.dump: data
请问有人能帮助我如何正确地编写核心转储,以便可以在gdb中使用吗?
PS:我不想使用标准的核心转储文件。
2个回答

5

我认为您某种程度上没有将所有数据写入核心文件。

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

#!/bin/sh
cat > /tmp/core.$$

现在生成一个核心文件(例如运行sleep 1243,然后按下ctrl+\),它应该可以正常工作。我在我的系统上进行了测试,没有任何问题。

谢谢您的快速回复。我检查了您的方法并且它起作用了,所以我看了一下我的c代码,发现在将数据复制到缓冲区时有错误。现在它能正常工作了。 - AvadhP
2
我也遇到了同样的问题,但是我想知道上述步骤会做什么?它会生成一个新的核心转储文件,可以作为参数传递给gdb吗?谢谢! - sad

4
首先要检查的是Elf头标志,它指示了文件类型。它有四个值 - 共享对象、未链接的对象、可执行文件和核心转储。这很可能是导致gdb错误的原因。
此外,尝试使用objdump进行检查 - 它可以分解整个ELF文件以分析其中的不良部分。
您可以在https://refspecs.linuxbase.org/elf/elf.pdf找到ELF规范。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接