最新のコンパイラGCCは非常に強力であるため、コンパイルフェーズでのバッファオーバーフローを防ぐこともできるため、OSはスタックスペースでコードを実行できません。
例えば:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, 256);
}
void main()
{
char large_string[256];
int i;
for( i = 0; i < 256; i++)
large_string[i] = 'A';
function(large_string);
}
魔法の0x41414141を取得できる唯一の方法は、次のようなGCCコンパイルパラメータを設定することです。
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
(ubuntu 10.04 x86 lucid 32ビットボックスでテストしました)
GCCスタックスマッシング保護をバイパスする方法はありますか?