私は以下のコードを持っています:
char buffer[10];
void main(int argc, char *argv[]) {
strcpy(buffer, argv[1]);
printf("value of buffer %s\n",buffer);
}
main関数内にバッファ変数を配置すると、スタックがオーバーフローする可能性があることはわかっていますが、グローバル変数として宣言することで、コマンドラインから入力したASCII文字の数に関係なく、何も起こりません。セグメンテーション違反を予想していましたが、入力したすべての文字が印刷されているようです。どうして?
このトピックに関連する別の質問があります。プログラムにバッファオーバーフローの脆弱性がある場合、たとえばスタックオーバーフローの場合、脆弱な変数に必要な大きさのコードを入力できますか、またはコードがユーザープログラムに割り当てられたメモリの境界?