今天看到百度知道上有人问栈溢出怎么检测,我好奇心起,查了一下,结果查到linux上有一个强大的库libsigsegv,可以检测栈溢出(说不定也是用信号实现的)。测了一下,果真可以。此库可以在
http://www.gnu.org/software/libsigsegv/上下载到。
#include
#include
#include "sigsegv.h"
static int size = 0;
void oink() {
int garbage[1024]; // push this onto the stack.
//#ifdef DEBUG
size += sizeof(int);
fprintf(stderr, "allocated %d kb of stack memory\n", size);
//#endif /* DEBUG */
oink();
}
void
stackoverflow_handler (int emergency, stackoverflow_context_t scp)
{
printf ("Stack overflow caught.");
exit(0);
//sigprocmask (SIG_SETMASK, &mainsigset, NULL);
//sigsegv_leave_handler (stackoverflow_handler_continuation,
// (void *) (long) (emergency ? -1 : pass), NULL, NULL);
}
#ifndef SIGSTKSZ
# define SIGSTKSZ 16384
#endif
int main() {
char mystack[SIGSTKSZ];
stackoverflow_install_handler (&stackoverflow_handler,
mystack, sizeof (mystack));
oink();
return 0;
}