Формат файла дампа ядра - PullRequest
5 голосов
/ 06 июля 2011

Я написал специальное приложение для обработки дампов ядра для проекта.Я изменил / proc / sys / kernel / core_pattern для вызова моего обработчика дампа, и он успешно вызван.

Теперь проблема заключается в сохранении дампа ядра в файл, который может быть распознан gdb.В настоящее время мой обработчик дампов читает дамп из 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 ]

4 голосов
/ 07 июля 2011

Я думаю, что вы как-то не записываете все данные в основной файл.

Создайте простой скрипт, сделайте его исполняемым и установите базовый шаблон для скрипта.

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

Теперь создайте файл ядра (например, запустите sleep 1243 и нажмите ctrl+\), и он должен работать.

Я сам проверил это на своей системе, и он работает без проблем.

4 голосов
/ 07 июля 2011

Первое, что нужно проверить, это флаг заголовка Elf, который указывает, что это за файл.Он имеет четыре значения - общий объект, несвязанный объект, исполняемый файл и дамп ядра.Это, скорее всего, причина ошибок gdb.

Кроме того, попробуйте проверить его с помощью objdump - он может разделить весь файл ELF для анализа, какая его часть, по-видимому, не подходит.спецификация ELF http://refspecs.freestandards.org/elf/elf.pdf

...