main.c
int main=195;
mainが0xC3(retq)として実行されるので、これだけで正常に「なにもせず終了するプログラム」になるはずだった。
このままコンパイルすると、スタック領域にmainが確保されるらしいので実行できずセグメンテーション違反になる。
実行できるようにするには、スタック領域のコードを実行可能になるようにコンパイル時にオプションを指定する。
IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:バッファオーバーフロー: #5 運用環境における防御
$ gcc -z execstack main.c $ ./a.out $
できた。おわり