其中的数组生命通常会被编译器翻译为“ sub 0x800000 %exp",即通过更改ESP来为局部变量分配空间。而对于这里的函数foo,由于这里局部数组的大小和默认栈大小相同(8192KB),因此ESP的值会变为非法,确切的说,在执行完“
sub 0x800000
%exp"这条语句后,ESP所指向的内存地址不在进程的任何一个合法内存线性区的范围之内;当程序运行到printf()时,会用到ESP进行寻址,这
时候会出现缺页异常,而异常处理程序会根据导致异常发生的不同场景采取不同的处理;对于这个foo函数,缺页异常处理函数会判定属于访问非法地址,因此向
进程发送SIGSEGV信号,导致进程终止执行。