Основной дамп основного приложения в небольшой встроенной системе - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь сбросить ядро ​​основного приложения segfaulting в небольшой встроенной системе, работающей в Linux.Основное приложение по существу обрабатывает полное выполнение и функциональность устройства и заставляет систему перезагружаться при получении сигнала SIGSEGV.

Я убедился, что:

  • Разрешено, чтобы дамп ядра имел неограниченный размер
    • ulimit -c unlimited
  • задан выходной путь к каталогу с достаточным свободным пространством (смонтированная SD-карта) для записи
    • sysctl -w kernel.core_pattern='/path/to/dir/core_%e.%p'
  • У меня есть разрешение на чтение и выполнениебинарный

Я попытался сбросить ядро ​​фиктивного процесса следующим образом:

sleep 10 &
killall -SIGSEGV sleep

И он работает, как и ожидалось, генерируя дамп ядра процесса в нужном месте,

Однако основное приложение не создает дамп ядра, а просто вызывает перезагрузку системы.Я попытался segfaulting приложения как вручную, хотя моя оболочка, предоставленная telnet, а также использовать переполнение буфера стека удаленно (это то, что я пытаюсь исследовать).

Поскольку это небольшая встроенная система, у меня нет доступа к обычным утилитам, таким как gdb, ptrace, pstack и т. Д.

Есть ли здесь обходной путь, который позволил бы мне просматриватьстек процесса, либо во время работы, либо после получения сигнала SIGSEGV?

...