私はFreeBSDシステムでバッファオーバーフローを実験してきました。最初の実験として、悪用されたプログラムに別のプロセス(この場合は/ bin / hostname)を開始させようとしました。それはすべて正常に機能し、プログラムはホスト名を出力してから終了しました。その後、プログラムにシェルを生成させようとしました(つまり、/ bin / shを実行します)。これは、呼び出されるプログラムを表す文字列を交換するだけで実行できると思いました。これを試してみると、悪用されたプログラムは単に終了します。gdbによると、新しいプロセス(/ bin / sh)が正常に生成されます。ただし、シェルは生成されません。次に、最初のエクスプロイトを試し、/ bin/shファイルを/bin/ hostnameに移動しましたが、それでも何も変更されません。私の質問は、/ bin /shを他のコマンドと実行することについて何が違うように見えるかということです。
参考までに、シェルの生成を試みるために、次のシェルコードを使用しました。
char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x50"
"\x54\x53\xb0\x3b\x50\xcd\x80";