How to overflow the stack without pushing new stack frames?
c, segmentation-fault, stack-overflow
Solution
C99 uses a resizable array, which you could use and keep resizing it to a larger one. However this resizable array is implemented using `alloca`. Here's a sample code in UNIX env:
#include <stdio.h>
#include <alloca.h>
#include <stdlib.h>
#include <stdbool.h>
int
main()
{
while (true)
{
void *p = alloca(32UL);
printf("new memory allocated at %p \n", p);
}
exit(EXIT_SUCCESS);
}
And your output will look like this
new memory allocated at 0xbf800a60
new memory allocated at 0xbf800a30
new memory allocated at 0xbf800a00
new memory allocated at 0xbf8009d0
new memory allocated at 0xbf8009a0
[1] 3977 segmentation fault ./a.out
`alloca` is in the `malloc` family of functions, except that it allocated memory on the stack by adjusting the stack pointer.
Problem
One obvious way to cause a stack overflow and get `Segmentation fault` would be to recursively push stack frames on top of each other until it booms. I'm wondering if stack overflow could happen without even pushing new stack frames. Creating a large enough array could do it too from experience, but any other possible scenarios?