Bhrigu Pandey
Bhrigu Pandey

Reputation:

Generate a stack overflow

How to create the condition of stack overflow in GNU/linux?

Upvotes: 4

Views: 5749

Answers (8)

Jay D
Jay D

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

Giovanni Galbo
Giovanni Galbo

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

Matthew Flaschen
Matthew Flaschen

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

edef
edef

Reputation: 752

I'd recommend reading the phrack magazine article "Smashing the stack for fun and profit". It also contains sample code.

Upvotes: 9

dmityugov
dmityugov

Reputation: 4508

With alloca() or strdupa()

Upvotes: 1

cletus
cletus

Reputation: 625307

You just need to think about what uses the stack in C.

  • Dynamic memory allocation (with malloc()) uses the heap;
  • Local variables and function call stacks use the stack.

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

Jason
Jason

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

ceejayoz
ceejayoz

Reputation: 180125

There are code samples in the Wikipedia article. Why you'd want to cause one is beyond me...

Upvotes: 4

Related Questions