Phrack Magazine (http://phrack.org/phrack/55/P55-08) の off-by-one exploit を読みました。要約しておきます。 void func(const char* sm) { char buffer[256]; for(int i=0; i<=256; ++i) { // 255が正解 buffer[i] = sm[i]; } } int main(int argc, char** argv) { func(argv[1]); return 0; } このような、1バイトだけオーバーフローするbugのあるコードを書いてしまい、更に引数 sm に自由なバイト列を設定できる場合、それがどのようにして arbitrary code execution に繋がるかが書いてあります。 以下、簡単な解説です。 buffer[256] には