LINUX.ORG.RU

Ловля stack overflow


0

0

Вот такая проблема - нужно _всегда_ ловить stack overflow, причем нативный код может быть получен не только с помощью gcc, а как угодно, хоть самописный на ассемблере. Я посмотрел в info libc, там сказано, что сигнал SIGILL _может_ бросаться в случае переполнения стека. Не уточняется, что значит - может. Всегда ли он бросается, и всегда ли именно SIGILL, и именно с параметром ILL_BADSTK?

Есть ли вообще готовые методы ловли ситуации переполнения стека?

Спасибо!


> Есть ли вообще готовые методы ловли ситуации переполнения стека?

Может stackshield подойдет ?

anonymous
()

> Всегда ли он бросается, и всегда ли именно SIGILL

наверное это какие-то проверки с помощью компилятора,
ядро всегда посылает SIGSEGV.

однако ядро не всегда может определить, что стэк
переполнен, он может "упереться" в heap, поэтому:

> причем нативный код может быть получен не только с помощью
> gcc, а как угодно, хоть самописный на ассемблере.

можно вставить страничку на границе стэка с помощью
mmap(PROT_NONE, MAP_FIXED).

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.