Как найти определения обработчиков сигналов в ядре Linux? - PullRequest
1 голос
/ 09 апреля 2011

Я сейчас работаю над "Creation of Postmortem data logger in Linux on Intel architecture". Это не что иное, как создание основной утилиты. Может ли какой-либо орган поделиться подробностями о том, как обрабатываются сигналы для различных сигналов (SIGSEGV,SIGABRT,SIGFPE etc), которые выдают core dump при сбое приложения, реализованного внутри ядра Linux. Мне нужно переписать эти обработчики сигналов с учетом моих собственных потребностей пользователя и пересобрать ядро. Это заставляет мое ядро ​​создавать файл ядра (после сбоя приложения) с конкретными потребностями пользователя, такими как показ registers,stackdump and backtrace etc.

Может кто-нибудь поделиться подробностями об этом .... Заранее спасибо всем ответчикам:)

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Возможно, вам вообще не нужно изменять ядро ​​- ядро ​​поддерживает вызов приложения из пользовательского пространства, когда происходит дамп ядра.Из справочной страницы core(5) :

Начиная с ядра 2.6.19, Linux поддерживает альтернативный синтаксис для файла /proc/sys/kernel/core_pattern.Если первый символ этого файла является символом канала (|), то остальная часть строки интерпретируется как программа, которая должна быть выполнена.Вместо записи в файл на диске дамп ядра задается как стандартный ввод для программы.

1 голос
/ 09 апреля 2011

LXR, перекрестная ссылка Linux , обычно полезна, когда вы хотите узнать, как что-то делается в ядре Linux.Это инструмент для поиска и поиска исходных кодов ядра.

Поиск по «дампу ядра» возвращает много обращений, но два из наиболее перспективных выглядят в fs/exec.c и fs/proc/kcore.c (многообещающе, потому что имена файлов довольно общие, в частности, вы не хотите начинать с вещей, специфичных для архитектуры).kcore.c на самом деле для дампа ядра ядра, но попадание в fs/exec.c находится в функции do_coredump, которая является основной функцией для дампа ядра процесса.Оттуда вы можете как прочитать функцию, чтобы увидеть, что она делает, так и выполнить поиск, чтобы узнать, как она вызывается.

Большая часть кода в do_coredump посвящена определению, следует ли создавать дамп ядра и куда должен идти дамп.,То, что выводить, обрабатывается ближе к концу: binfmt->core_dump(&cprm), т.е. это зависит от формата исполняемого файла (ELF, a.out,…).Таким образом, ваш следующий поиск находится в поле структуры core_dump, в частности, его «использование»;затем выберите совпадение, соответствующее исполняемому формату. ELF - это, вероятно, тот, который вам нужен, и поэтому вы попадаете в функцию elf_core_dump.

Как говорится, я не уверен в вашем описанииваши цели в том, что вы действительно хотите изменить формат дампа ядра, в отличие от написания инструмента, который анализирует существующие дампы.

Вас может заинтересовать существующая работа по анализу аварийных дампов ядра ,Часть этой работы относится и к дампам процессов, например, расширение gcore для включения дампов процессов в дампы ядра * .

1 голос
/ 09 апреля 2011

Фактический код дампа зависит от формата дампа. Для формата ELF посмотрите файл fs/binfmt_elf.c. У меня есть elf_dump_core функция. (То же самое с другими форматами.)

Это вызвано get_signal_to_deliver в kernel/signal.c, который вызывает do_coredump в fs/exec.c, который вызывает обработчик.

...