バッファオーバーランの場合、プログラムはいつクラッシュしますか
#include<stdio.h>
#include<stdlib.h>
main() {
char buff[50];
int i=0;
for( i=0; i <100; i++ )
{
buff[i] = i;
printf("buff[%d]=%d\n",i,buff[i]);
}
}
割り当てられた最初の 50 バイトはどうなりますか? プログラムがクラッシュするのはいつですか?
gcc a.out を使用した UBUNTU で、i 99 のときにクラッシュしていることがわかります
>>
buff[99]=99
*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
<<
for ループの buff[51] で割り当てが発生したときに、これがクラッシュしない理由を知りたいですか?