explore_notesearch プログラムについて質問があります。
このプログラムは、system() 関数で最終的に呼び出すコマンド文字列を作成するためにのみ使用され、バッファ オーバーフローの脆弱性を含む notesearch プログラムを悪用します。commandstr は次のようになります: ./notesearch Nop-block|shellcode|repeated ret (nop ブロックでジャンプします)。
実際の質問: ret-address は、exploit_notesearch プログラムで次の行によって計算されます。
ret = (unsigned int) &i-offset;
それではなぜ、exploit_notesearchプログラムのメイン スタックフレームのかなり下にあるi 変数のアドレスを使用して、 notesearchプログラム自体のオーバーフロー バッファに保存されるret アドレスを計算できるのでしょうか。異なる stackframeであり、nop ブロック (同じバッファーにある) にアドレスを含める必要があります。