Повреждение стека и использование стека альтернативных сигналов - PullRequest
0 голосов
/ 15 августа 2011

Я просматривал Руководство программиста по Linux об альтернативном стеке сигналов.

http://www.kernel.org/doc/man-pages/online/pages/man2/sigaltstack.2.html

Я вижу, что sigaltstack () используется, когда стек пользователя поврежден или переполнен. Моя проблема заключается в том, как обнаружить во время выполнения, если стек поврежден?

В моей работающей программе на производстве я хочу использовать альтернативный стек сигналов, если моя программа обнаружит, что стек поврежден. Это правильный вопрос? Люди в некоторых темах говорят об использовании инструментов отладки, таких как Valgrind (и, возможно, другие), но, к сожалению, роскошь недоступна в производстве.

1 Ответ

0 голосов
/ 15 августа 2011

Вы действительно не можете обнаружить поврежденный стек из самого процесса - как только ваш стек поврежден, вся ваша программа (включая любые функции / переменные, которые вы могли бы попытаться использовать для обнаружения повреждения) становится непредсказуемой.

И вы не сможете восстановить поврежденный стек, даже если сможете его обнаружить.Невозможно сказать, какой ущерб был причинен при запуске кода в поврежденном стеке.Поэтому лучшее (вероятно, единственное), что нужно сделать - это просто выйти в этот момент.

Полностью прочитайте страницу руководства, причина, по которой она использует альтернативный стек, - хорошая (обработка SIGSEGV).Хотя вы, как правило, тоже не можете это исправить, так что выход - почти единственное, что вы можете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...