Я мог видеть, где, если ошибка сегментации связана с обращением указателя стека к памяти, где это не разрешено ОС, тогда вы не сможете делать какие-либо вызовы с указателем текущего стека для вашего процесса ...включает в себя вызовы обработчикам сигналов.Другими словами, пролог, созданный компилятором для вашей функции обработчика сигналов, должен установить запись активации в стеке ... если сам указатель стека недействителен, то это будет невозможно.Одним из способов этого может быть переполнение массива памяти, который затем записывает поверх записи активации для выполняемой в данный момент функции.
Вы можете определить другую область памяти, которая будет использоваться в качестве стека для обработчиков сигналов sigaltstack()
, а затем установите параметр SA_ONSTACK
в sigaction()
для сигнала.Это может быть то, что вы можете попробовать.
Наконец, вы также можете столкнуться с проблемами, если вы используете не асинхронные безопасные функции или каким-то образом обращаетесь к указателям или памяти, которая находится вне сегмента памяти, выделенноговаш процесс в ОС в вашем обработчике сигналов.