私が参照しているコードはここにあります:コードへのリンク
バッファ オーバーフロー エクスプロイトは、次のようなバッファを使用することを読みました。
| | NOP スレッド | シェルコード | リターンアドレスの繰り返し |
私が理解していることから、バッファーが関数パラメーターとしてスタックに置かれ、関数の戻りアドレスを上書きすると、エクスプロイトが発生します。また、繰り返される戻りアドレスが、スタック上の同じバッファー内の NOP スレッドを指していることも理解しています。
私が理解していないのは、次のとおりです。
リターン アドレスが同じバッファ内のシェルコードを指さなければならないのはなぜですか? 繰り返される戻りアドレスが、NOP スレッドとシェルコードを見つけることができるメモリの別の部分を指していないのはなぜですか?
たとえば、「ret」コマンドが正しいアドレスを読み取り、途中から読み取らないように、バッファーの戻りアドレスを元のアドレスと完全に揃えるにはどうすればよいですか。