Цитата(3.14 @ Feb 21 2007, 00:07)

Код
Такую функцию сделать и самому не сложно...
Моих познаний для этого не достаточно.
Я все-таки думаю, что достаточно.

Такая функция должна делать всего две вещи в первом приближении: получать текущее значение SP и сравнивать его c константой - пределом стека. Если перешли - значит ошибка.
Как с помощью ассемблерной вставки прочитать SP, думаю, разобраться не сложно. Что же касается вышеупомянутой константы - ее можно либо объявить с помощью скрипта линкера (экспортировать символ-указатель на нижнюю границу стека), либо иным доступным способом.
Сложнее сделать backtrace, но тоже вполне реально. Тем более, что у компиляторов есть возможность генерирования стековых фреймов в соответствии со стандартом APCS.

Цитата(scifi @ Feb 21 2007, 03:41)

Есть один простой способ, хотя и не идеальный. При запуске программы область стека инициализируется известными данными (например, 0x12345678). Затем программу гоняют, стараясь заставить её использовать стек по максимуму. После этого смотрят в облась стека и видят, сколько было затёрто (данные не равны 0x12345678).
Да уж, от идеала далеко... Как часто нужно запускать процедуру контроля?
К тому же при переполнении стека программа может уже не вернуться в основную свою ветку, где происходит проверка. Так что этот способ лично мне видится совершенно бесполезным.