Reputation:
How to create the condition of stack overflow in GNU/linux?
Upvotes: 4
Views: 5749
Reputation: 3297
Lot of examples have been referred here in other answers. But every one seems to have missed this.
To force the stack overflow, one needs to understand what is the size of your stack. In linux the default size of the stack is 8MB.
ulimit -a //would give you the default stack size
ulimit -s 16384 // sets the stack size to 16M bytes
So you can force the stack overflow even with an array of say 100 integers , if you tweak the stack size to be that much small.
Upvotes: 1
Reputation: 13081
"how to create the condition of stack overflow in linux"
The same way you'd create a stack overflow on Windows.
Jason's answer might work, but some compilers by optimize it into a loop. I think adding a a parameter will do the trick:
int Add(int num)
{
num += Add(num);
return num;
}
Upvotes: 0
Reputation: 284927
The simplest way is just declare a large enough automatic stack variable. No recursion or alloca needed. Interestingly, this is not a compile-time error. The size needed will vary by platform:
#define SIZE 10000000
int main(int argc, char **argv)
{
char a[SIZE];
}
Upvotes: 1
Reputation: 752
I'd recommend reading the phrack magazine article "Smashing the stack for fun and profit". It also contains sample code.
Upvotes: 9
Reputation: 625307
You just need to think about what uses the stack in C.
malloc()
) uses the heap;So, all you have to do is exhaust the stack. Either endless recursion on a function or large local variable creation (don't let them be cleaned up though by going out of scope) should do it.
Upvotes: 5
Reputation: 15931
a recursive function with no way out should do the trick
pseudo-code, my c is a bit rusty
void stack_overflow()
{
stack_overflow();
}
Upvotes: 14
Reputation: 180125
There are code samples in the Wikipedia article. Why you'd want to cause one is beyond me...
Upvotes: 4