Я пытаюсь сбросить ядро основного приложения segfaulting в небольшой встроенной системе, работающей в Linux.Основное приложение по существу обрабатывает полное выполнение и функциональность устройства и заставляет систему перезагружаться при получении сигнала SIGSEGV
.
Я убедился, что:
- Разрешено, чтобы дамп ядра имел неограниченный размер
- задан выходной путь к каталогу с достаточным свободным пространством (смонтированная SD-карта) для записи
sysctl -w kernel.core_pattern='/path/to/dir/core_%e.%p'
- У меня есть разрешение на чтение и выполнениебинарный
Я попытался сбросить ядро фиктивного процесса следующим образом:
sleep 10 &
killall -SIGSEGV sleep
И он работает, как и ожидалось, генерируя дамп ядра процесса в нужном месте,
Однако основное приложение не создает дамп ядра, а просто вызывает перезагрузку системы.Я попытался segfaulting приложения как вручную, хотя моя оболочка, предоставленная telnet, а также использовать переполнение буфера стека удаленно (это то, что я пытаюсь исследовать).
Поскольку это небольшая встроенная система, у меня нет доступа к обычным утилитам, таким как gdb, ptrace, pstack и т. Д.
Есть ли здесь обходной путь, который позволил бы мне просматриватьстек процесса, либо во время работы, либо после получения сигнала SIGSEGV
?