核心转储文件格式

时间:2011-07-06 19:59:17

标签: linux gdb kernel

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

现在问题是将核心转储保存到gdb可以识别的文件中。目前我的dump-handler从STDIN读取转储并将其保存到文件'core.dump'中。当我尝试将此核心转储加载到gdb时,它给出了错误:

(gdb) ... is not a core dump: File format not recognized

当我在标准核心转储上运行'file'命令时,它会给我以下信息:

core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'

对于自定义生成的转储,'file'给出以下内容:

core.dump: data

请任何人都可以帮我正确编写core-dump,以便在gdb中使用。

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

2 个答案:

答案 0 :(得分:4)

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

另外,尝试用objdump检查它 - 它可以分开整个ELF文件以分析它的哪一部分显然不好。

您可以在http://refspecs.freestandards.org/elf/elf.pdf

找到ELF规范

答案 1 :(得分:4)

我认为你不知何故不把所有数据写入核心文件。

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

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

现在生成核心文件(例如运行sleep 1243并按ctrl+\),它应该可以正常工作。

我刚刚在我的系统上测试了它,它没有问题。