Хорошая старая плохая printf
отладка :). Сделайте так, чтобы ваша программа отбрасывала хлебные крошки (в форме вывода на консоль или записи в журнал) в непосредственной близости от точки cra sh. Когда вы лучше поймете, где находится точка sh, сделайте панировочные сухари плотнее. Предполагая, что ваш cra sh достаточно детерминирован c, в конечном итоге он сойдется в точку cra sh.
Другой метод, установите обработчик сигналов для SIGSEGV. Как только сигнал сработает, сбросьте регистры точек cra sh, а затем используйте что-то вроде addr2line
, чтобы преобразовать IP-адрес в исходную строку. Вам понадобится начальный адрес модуля.